13. Pour faire durer le plaisir!
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Vérifier le format d’une colonne
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Travailler avec un format date
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQoNCiMgMS4gUHLDqWxpbWluYWlyZXMNCiMjIERlcyBkb25uw6llcyBiaWVuIG9yZG9ubsOpZXMgY29tbWVuY2VudCBwYXIgc29pLW3Dqm1lIQ0KDQoNCi0gTGUgbmV0dG95YWdlIGRlIGZpY2hpZXJzIGRlIGRvbm7DqWVzIGVzdCB1bmUgdMOiY2hlIHNvdXZlbnQgbG9uZ3VlIGV0IGVubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkF2YW50IGQndXRpbGlzZXIgc2VzIGRvbm7DqWVzIGRhbnMgbGUgbG9naWNpZWwgZGUgc29uIGNob2l4LCBsZSBuZXR0b3lhZ2UgZGUgc2VzIGRvbm7DqWVzIHBldXQgZG9uYyBpbmNsdXJlIGRlIG5vbWJyZXVzZXMgdMOiY2hlcyBjb21tZToNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL2JvdHRsZS5wbmciIHdpZHRoPSIxNzVweCIgLz4NCjwvZGl2Pg0KLSBNb2RpZmllciBsJ2VuY29kYWdlLg0KLSBTdXBwcmltZXIgbGVzIGRvdWJsb25zLg0KLSBEaXZpc2VyIGxlcyBjZWxsdWxlcyBjb21wb3PDqWVzIGRlIHZhbGV1cnMgbXVsdGlwbGVzLiAgIA0KLSBSZWNvZGVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMuDQotIFJlcMOpcmVyIGxlcyBlcnJldXJzIGRlIHNhaXNpZSwgbGVzIHZhbGV1cnMgYWJlcnJhbnRlcy4uLg0KLSBGdXNpb25uZXIgZGVzIGZpY2hpZXJzLg0KLSBGdXNpb25uZXIgZGVzIGNvbG9ubmVzLg0KLSBBZ3LDqWdlciBkZXMgdmFsZXVycyBkZSB2YXJpYWJsZXMuDQotIENyw6llciBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkdSBmaWNoaWVyLg0KLSBUcmFuc2Zvcm1lciBsZXMgY29sb25uZXMgZW4gcmFuZ8OpZXMgKGZvcm1hdCAid2lkZSIgZW4gImxvbmciKS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpZXMsIHF1J2VsbGVzIHNvaWVudCBudW3DqXJpcXVlcyBvdSB0ZXh0dWVsbGVzID0+IHNhdXZlIHRlbXBzIGV0IMOpbmVyZ2llLg0KDQoNCjxjZW50ZXI+ICAgDQoNCjxpbWcgc3JjPSJpbWFnZXMvMTkxOC1BZC04NjAtODYweDU3My5qcGciIHdpZHRoPSI2MCUiLz4NCg0KPC9jZW50ZXI+ICAgDQoNCg0KPC9icj4NCg0KIyMjIEZvbmN0aW9ucyBzcMOpY2lhbGlzw6llcyBwb3VyOg0KDQotICpFeHBsb3Jlciogc2VzIGRvbm7DqWVzIHNvdXMgdG91cyBzZXMgYW5nbGVzIChncsOiY2Ugw6AgZGVzIGZpbHRyZXMsIHRyaXMsIGZhY2V0dGVzLCByZWdyb3VwZW1lbnRzKS4gICANCi0gKk5ldHRveWVyKiA6IHJlcMOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KKirDgCBub3RlcioqIA0KDQpPcGVuUmVmaW5lIG4nZXN0IHBhcyB1biBvdXRpbCBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiBldCBuZSBwZXJtZXQgcGFzIGRlIGNyw6llciB1biBqZXUgZGUgZG9ubsOpZXMgw6AgcGFydGlyIGRlIHrDqXJvLiBDZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZGUgcmVtcGxhY2VtZW50IG1haXMgY29tcGzDqW1lbnRhaXJlLg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjEuIEV4ZW1wbGVzIGQndXRpbGlzYXRpb24NCg0KSGFybW9uaXNlciwgc3RhbmRhcmRpc2VyLCB1bmlmb3JtaXNlci4uLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I4LmpwZykgICANCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQoNCioqKg0KDQoNCiMgMy4gSW5zdGFsbGF0aW9uIGV0IGZvbmN0aW9ubmVtZW50IGfDqW7DqXJhbA0KDQotIFtUw6lsw6ljaGFyZ2VyIGV0IGTDqXppcHBlcl0oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy9kb3dubG9hZC5odG1sKSBsZSBsb2dpY2llbCBkYW5zIHVuIGRvc3NpZXIgZGUgc29uIGNob2l4Lg0KDQotIENyw6nDqSBlbiBsYW5nYWdlIEphdmEgW2RvbmMgbsOpY2Vzc2l0ZSBsJ2luc3RhbGxhdGlvbiBkZSBKYXZhICg2NCBiaXRzIGRlIHByw6lmw6lyZW5jZSldKGh0dHBzOi8vd3d3LmphdmEuY29tL2VuL2Rvd25sb2FkLykuDQoNCi0gTmF2aWdhdGV1cnMgw6AgcHJpdmlsw6lnaWVyOiBDaHJvbWUsIE9wZXJhLCBFZGdlLiBGaXJlZm94IHBldXQgcG9zZXIgcHJvYmzDqG1lIChuZSBmb25jdGlvbm5lIHBhcyBkYW5zIElFKS4gIA0KDQotIExlIGZvbmN0aW9ubmVtZW50IGQnT3BlblJlZmluZSBwZXV0IMOqdHJlIHVuIHBldSBkw6lyb3V0YW50IGF1IGTDqXBhcnQgY2FyIGlsIG4neSBhIHBhcyBkJ2luc3RhbGxhdGlvbiBlbiBib25uZSBldCBkdWUgZm9ybWUgY29tbWUgcG91ciB1biBsb2dpY2llbCByw6lndWxpZXIuDQoNCi0gUG91ciBkw6ltYXJyZXIgbGUgbG9naWNpZWwsIGNsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgYGAgYG9wZW5yZWZpbmUuZXhlYCBgYCBvdSBgcmVmaW5lLmJhdGAuIElsIGVzdCB1dGlsZSBkZSBmYWlyZSB1biBjbGljLWRyb2l0IHN1ciBsZSBmaWNoaWVyIC5leGUgcG91ciBsJ8OpcGluZ2xlciBkYW5zIHNhIGJhcnJlIGRlIHTDomNoZXMgKHN1ciBNYWMsIGTDqXBsYWNlciBsJ2ljw7RuZSBPcGVuUmVmaW5lIGRhbnMgbGUgZG9zc2llciBkJ2FwcGxpY2F0aW9ucyBldCBkb3VibGUgY2xpcXVlciBzdXIgY2VsbGUtY2kpLg0KDQotIFVuZSBmZW7DqnRyZSBkZSBjb21tYW5kZSBub2lyZSBzJ291dnJpcmEgZXQgbGFuY2VyYSBsJ291dmVydHVyZSBkJ3VuIG9uZ2xldCBkYW5zIGxlIG5hdmlnYXRldXIgd2ViLiAgDQoNCi0gTGEgZmVuw6p0cmUgZGUgY29tbWFuZGVzIHBldXQgZW5zdWl0ZSDDqnRyZSBpZ25vcsOpZSBtYWlzIE5FIFBBUyBMQSBGRVJNRVIhIEVsbGUgbmUgc2VydmlyYSBxdSfDoCBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsLiAgDQoNCi0gU2kgbGUgbmF2aWdhdGV1ciBuZSBzJ291dnJlIHBhcyBhdXRvbWF0aXF1ZW1lbnQsIHNhaXNpciBsJ2FkcmVzc2UgaHR0cDovLzEyNy4wLjAuMTozMzMzLyBvdSBodHRwOi8vbG9jYWxob3N0OjMzMzMgZGFucyB1biBvbmdsZXQuIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxNy5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4xLiBUcmF2YWlsIGxvY2FsDQoNCi0gUmVwb3NlIGRvbmMgc3VyIGRldXggY29tcG9zYW50ZXM6IHVuICoqc2VydmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwsIG1haXMgKipsZXMgZG9ubsOpZXMgbmUgc29udCBwYXMgc3VyIGxlICJudWFnZSIqKi4NCg0KLSBUcmF2YWlsIGxvY2FsIGRvbmMgcGFzIGQnZW52aXJvbm5lbWVudCBjb2xsYWJvcmF0aWYuIA0KDQotIExlcyBmaWNoaWVycyBwcm9ncmFtbWVzIHNlIHRyb3V2ZXJvbnQgZGFucyBsZSBkb3NzaWVyIGQnaW5zdGFsbGF0aW9uIGV0IGxlcyBmaWNoaWVycyBkZSBwcm9qZXRzIGRhbnMgbGUgKndvcmtzcGFjZSBkaXJlY3RvcnkqLg0KDQotIE9wZW5SZWZpbmUgbmUgbW9kaWZpZSBwYXMgbGUgZmljaGllciBvcmlnaW5hbCwgaWwgdHJhdmFpbGxlIMOgIHBhcnRpciBkJ3VuZSAqKmNvcGllIGVuIG3DqW1vaXJlIHN0b2Nrw6llIGVuIGFyY2hpdmVzKiogZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsLg0KDQotIExlIHByb2pldCBlc3QgZW5yZWdpc3Ryw6kgZW4gZm9ybWF0IE9wZW5SZWZpbmUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsIMOgIHRvdXRlcyBsZXMgNSBtaW51dGVzIChbcGV1dCDDqnRyZSBtb2RpZmnDqV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ydW5uaW5nI2p2bS1wcmVmZXJlbmNlcykpLg0KDQotIExlIGZpY2hpZXIgZGUgZG9ubsOpZXMgdW5lIGZvaXMgbmV0dG95w6kgcG91cnJhIMOqdHJlIGV4cG9ydMOpIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgZXQgbCdoaXN0b3JpcXVlL3N5bnRheGUgcG91cnJhIMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04gZXQgZW5yZWdpc3Ryw6kgZGFucyB1biBmaWNoaWVyIC50eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdvIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4yLiDDiWNyYW4gZCdhY2N1ZWlsDQoNCi0gw4AgcGFydGlyIGR1IG1lbnUgZGUgZ2F1Y2hlLCBpbCBlc3QgcG9zc2libGUgZGUgYENyw6llciB1biBwcm9qZXRgLCBgT3V2cmlyIHVuIHByb2pldGAgKGhpc3RvcmlxdWUgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzKSBvdSBgSW1wb3J0ZXIgdW4gcHJvamV0IGAgKGFyY2hpdmVzIC56aXAgc2UgdHJvdXZhbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwpLiAgIA0KDQotIFBvdXIgY2hhbmdlciBsYSBsYW5ndWUgZGUgbCdpbnRlcmZhY2UgYXUgZnJhbsOnYWlzLCBjbGlxdWVyIHN1ciBsJ29uZ2xldCBgTGFuZ3VlYCBkYW5zIGxlIG1lbnUgZGUgZ2F1Y2hlLiAgDQoNCi0gTGUgZmljaGllciBwZXV0IMOqdHJlIGNyw6nDqSDDoCBwYXJ0aXIgZGUgZGlmZsOpcmVudGVzIHNvdXJjZXM6IGBDZXQgb3JkaW5hdGV1cmAgKHBvc3RlIGxvY2FsKSwgYEFkcmVzc2VzIHdlYiAoVVJMcylgLCBgUHJlc3NlLXBhcGllcmAgKGNvcGnDqS1jb2xsw6kpLCBgR29vZ2xlIGRhdGFgIChHb29nbGUgc2hlZXRzKS4uLikgZXQgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyAoLmNzdiwgLnR4dCwgLnhtbCwgLnhscywgLkpTT04sIC56aXAgZXQgbm9uIHRhci4uLiAoY2VydGFpbmVzIGV4dGVuc2lvbnMgcGVybWV0dGVudCBsJ3VzYWdlIGQnYXV0cmVzIGZvcm1hdHMgY29tbWUgcmRmKS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxLmpwZykgIA0KDQo8L2NlbnRlcj4gIA0KDQotIERldXggZmljaGllcnMgb3UgcGx1cyBwZXV2ZW50IMOqdHJlIGltcG9ydMOpcyBlbiBtw6ptZSB0ZW1wcy4gTGVzIGxpZ25lcyBzZXJvbnQgaW1wb3J0w6llcyB1bmUgw6AgbGEgc3VpdGUgZGUgbCdhdXRyZSBzZWxvbiBsJ29yZHJlIGQnaW1wb3J0YXRpb24gKHVuZSBjb2xvbm5lIHBlcm1ldHRhbnQgZCdpZGVudGlmaWVyIGxlIGZpY2hpZXIgc291cmNlIHNlcmEgY3LDqcOpZSBhdXRvbWF0aXF1ZW1lbnQpLiANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4zLiBIaXN0b3JpcXVlIGRlcyBwcm9qZXRzDQoNCi0gTCdvbmdsZXQgYE91dnJpciB1biBwcm9qZXRgIHBlcm1ldDoNCiAgLSBEJ2FjY8OpZGVyIGV0IGQnb3V2cmlyIHRvdXMgbGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIGxvY2FsZW1lbnQuDQogIC0gRCfDqWRpdGVyIHNlcyBtw6l0YWRvbm7DqWVzLg0KICAtIEQnYWNjw6lkZXIgYXUgZG9zc2llciBkZSB0cmF2YWlsIChkw6lmaW5pIHBhciBkw6lmYXV0KSBvw7kgT3BlblJlZmluZSBzdG9ja2UgbGVzIGFyY2hpdmVzIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBwYXIgbGUgYmlhaXMgZHUgbGllbiBgUGFyY291cmlyIGxlIGRvc3NpZXIgZGUgbCdlc3BhY2UgZGUgdHJhdmFpbGAuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjMuanBnKQ0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50ICg1KSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSAoNiksIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzICg5KS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW4gbm91dmVhdSBwcm9qZXQgZW4gaW1wb3J0YW50IHVuIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpJbmNpZGVudHMgbcOpdHJvLW10bC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuIC0+IFN1aXZhbnQuDQooTGUgZmljaGllciBlc3QgYXVzc2kgZGlzcG9uaWJsZSBzdXIgbGUgc2l0ZSBbRG9ubsOpZXMgb3V2ZXJ0ZXMgTW9udHLDqWFsXShodHRwczovL2Rvbm5lZXMubW9udHJlYWwuY2Evc29jaWV0ZS1kZS10cmFuc3BvcnQtZGUtbW9udHJlYWwvaW5jaWRlbnRzLWR1LXJlc2VhdS1kdS1tZXRybykpLiAgICAgDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiBwb3VyIGZlcm1lciBsZXMgY2VsbHVsZXMgY29udGVuYW50IGxlcyBzw6lwYXJhdGV1cnMgZGUgY29sb25uZXNgICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDUuIEV4cGxvcmVyIGwnaW50ZXJmYWNlDQoNCi0gTCdpbnRlcmZhY2UgZXN0IHNpbWlsYWlyZSDDoCBFeGNlbCBtYWlzIG9uIG5lIHBldXQgdm9pciBsJ2Vuc2VtYmxlIGRlcyBsaWduZXMsIGxhICJsb2dpcXVlIiBkJ09wZW5SZWZpbmUgcmVwb3NlIHN1ciBsZSB0cmF2YWlsIGVuICoqY29sb25uZXMqKi4NCg0KLSBPcGVuUmVmaW5lIHByb3Bvc2UgZGV1eCB2dWVzIGRlcyBkb25uw6llczogYGxpZ25lc2AgZXQgYGVudHLDqWVzLmAgTGVzIGRvbm7DqWVzIHNvbnQgZ8OpbsOpcmFsZW1lbnQgcHLDqXNlbnTDqWVzIGVuIG1vZGUgYGxpZ25lc2AsIGMnZXN0LcOgLWRpcmUgY2hhcXVlIGxpZ25lIHJlcHLDqXNlbnRlIHVuZSBvYnNlcnZhdGlvbi4gTGUgbW9kZSBgZW50csOpZXNgIHBlcm1ldCBkJ2Fzc29jaWVyIHBsdXNpZXVycyBsaWduZXMgw6AgdW5lIG9ic2VydmF0aW9uLg0KDQotIElsIGVzdCBkb25jIHBvc3NpYmxlIGRlIG1vZGlmaWVyIGxhIHN0cnVjdHVyZSBkdSBmaWNoaWVyIHBvdXIgcXVlIHBsdXNpZXVycyBsaWduZXMgc29pZW50IGFzc29jacOpZXMgw6AgdW4gc2V1bCBjYXMgZW4gc2UgYmFzYW50IHN1ciBsYSBjb2xvbm5lIGNsw6kgKCoqc2V1bGUgbGEgbGlnbmUgb3JpZ2luYWxlIHNlcmEgbnVtw6lyb3TDqWUqKiksIG1haXMgZG9pdCBzZSBmYWlyZSBhdmVjIHByw6ljYXV0aW9ucy4gUG91ciBsZXMgbG9naWNpZWxzIGQnYW5hbHlzZSwgbGUgZm9ybWF0ICp0aWR5KiAoYGxpZ25lc2ApIGVzdCDDoCBwcml2aWzDqWdpZXIuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjQuanBnKSANCg0KPC9jZW50ZXI+ICANCg0KMS4gTGllbiBzb3VzIGwnaWPDtG5lIHJlbnZvaSB2ZXJzIGxhIHBhZ2UgZCdhY2N1ZWlsL2ltcG9ydGF0aW9uLg0KMi4gUmVub21tZXIgbGUgbm9tIGRlIHNvbiBwcm9qZXQgZW4gdG91dCB0ZW1wcy4NCjMuIFBlcm1hbGllbiBxdWkgcGVybWV0IGRlIHJldmVuaXIgw6AgdW5lIHZ1ZSBwcsOpY2lzZSAoYWZmaWNoYWdlLCB0cmksIGZhY2V0dGVzLi4uKSBkdSBwcm9qZXQuDQo0LiBOb21icmUgZGUgbGlnbmVzL29ic2VydmF0aW9ucyBkdSBmaWNoaWVyLg0KNS4gQ2hhbmdlbWVudCBkdSBtb2RlIGxpZ25lcyBvdSBvYnNlcnZhdGlvbnMuDQo2LiBNb2RpZmllciBsZSBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpZXMuDQo3LiBQYXNzZXIgZCd1bmUgcGFnZSDDoCBsJ2F1dHJlLg0KOC4gT3V2cmlyIHVuIG5vdXZlbCBvbmdsZXQgT3BlblJlZmluZS4NCjkuIEV4cG9ydGVyIGxlIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cy4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4xLiBMJ8OpZGl0aW9uIGRlIGNlbGx1bGVzDQoNCi0gSWwgZXN0IHBvc3NpYmxlIGQnw6lkaXRlciBtYW51ZWxsZW1lbnQgbGUgY29udGVudSBkZSBjZWxsdWxlcyBpbmRpdmlkdWVsbGVzIGVuIHNlIHBsYcOnYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gRGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogY2xpcXVlciBkYW5zIHVuZSBjZWxsdWxlICpBdXRyZXMqLCDDqWRpdGVyIHNvbiBjb250ZW51IHBvdXIgKmF1dHJlKiBldCBhcHBsaXF1ZXIgw6AgbGEgY2VsbHVsZS4gDQotIERhbnMgbGEgY29sb25uZSAqUG9ydGUqLCBtb2RpZmllciBsZSBmb3JtYXQgZGUgbidpbXBvcnRlIHF1ZWxsZSBjZWxsdWxlIMOgICpOb21icmUqIGV0IGFwcGxpcXVlciDDoCB0b3V0ZXMgbGVzIGNlbGx1bGVzIGlkZW50aXF1ZXMuDQotIERhbnMgbGEgY29sb25uZSAqw4l2YWN1YXRpb24qLCBtb2RpZmllciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgIiMiIHBhciAqTm9uKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMi4gRm9ybWF0IGRlcyBkb25uw6llcyAgDQoNCg0KIyMjIyBUcm9pcyBmb3JtYXRzIGRlIGJhc2U6IA0KICAxLiBDaGHDrm5lIGRlIGNhcmFjdMOocmVzDQogIDIuIE5vbWJyZQ0KICAzLiBEYXRlIChub3JtZSBJU08tODYwMSBZWVlZLU1NLUREVEhIOk1NOlNTWikqDQogIA0KDQogIA0KIyMjIyBEZXV4IGZvcm1hdHMgZMOpY291bGFudCBkJ2FjdGlvbnM6IA0KICAtIEVycmV1ciAoZm9ybWF0IGF0dHJpYnXDqSBzdWl0ZSDDoCB1bmUgZXJyZXVyIGRlIHRyYW5zZm9ybWF0aW9uKSAgDQogIC0gTnVsbCoqDQoNCg0KDQojIyMjIERldXggYXV0cmVzIHR5cGVzIHBhcnRpY3VsaWVycyBkw6ljb3VsYW50IGRlIG1hbmlwdWxhdGlvbnMNCiAgLSBCb29sw6llbiAodmFsZXVyIGJpbmFpcmUgVCBvdSBGKQ0KICAtICpBcnJheSogKGxpc3RlIGRlIHZhbGV1cnMgc8OpcGFyw6llcyBwYXIgdW5lIHZpcmd1bGUgZW50cmUgY3JvY2hldHMgcG91dmFudCDDqnRyZSB0cmFuc2Zvcm3DqWVzKQ0KDQo8L2JyPg0KDQojIyMjIyAqIEZvcm1hdCBkYXRlDQoNCi0gU2Vsb24gbGVzIGJlc29pbnMsIGxlcyBkYXRlcyBwZXV2ZW50IMOqdHJlIHRyYWl0w6llcyBzb3VzIGZvcm1lIGRlIGB0ZXh0ZWAsIGRlIGBub21icmVgIG91IGBkYXRlYCAobGUgZm9ybWF0IGRhdGUgZXN0IHN1cnRvdXQgbsOpY2Vzc2FpcmUgcG91ciBsZXMgY2FsY3VscyBkZSBkYXRlcykuDQotIExlIGZvcm1hdCBkYXRlIHJlcG9zZSBzdXIgdW5lIHPDqXJpZSBkJ291dGlscyBldCBkZSAgc3RhbmRhcmRzIHBvdXIgcmVjb25uYWl0cmUgZXQgY29udmVydGlyIGxlcyB2YWxldXJzIG9yaWdpbmFsZXMgZW4gZGF0ZS4gDQotIFBvdXIgcXUndW5lIGNlbGx1bGUgc29pdCByZWNvbm51ZSBjb21tZSBkYXRlLCBlbGxlIHNlcmEgdHJhbnNmb3Jtw6llIGF1IGZvcm1hdCAqSVNPLTg2MDEtY29tcGxpYW50Ki4NCi0gUG9zc2libGUgZGUgbW9kaWZpZXIgY2UgZm9ybWF0IHBvdXIgcXUnaWwgc29pdCBwbHVzIGZhY2lsZW1lbnQgbGlzaWJsZSDDoCBsJ2V4cG9ydGF0aW9uLg0KDQo8L2JyPg0KDQojIyMjIyAqKiBGb3JtYXQgIm1hbnF1YW50Ig0KDQotIE9wZW5SZWZpbmUgZmFpdCB1bmUgZGlzdGluY3Rpb24gZW50cmUgbGVzICoqY2VsbHVsZXMgdmlkZXMgYXZlYyBlc3BhY2VzIGJsYW5jcyoqIChxdWkgbmUgc29udCBwYXMgdmlkZXMhKSwgbGVzICoqdmFsZXVycyB2aWRlcyoqIChjaGFpbmUgZGUgbG9uZ3VldXIgMCksIGV0IGxlcyAqKnZhbGV1cnMgIm51bGwiKiogKHR5cGUgc3DDqWNpYWwgcXVpIG4nZXN0IHBhcyB1bmUgY2hhaW5lIGRlIGNhcmFjdMOocmVzKS4gTGVzICp2aWRlcyogZXQgbGVzICpudWxsKiBzb250IGF1c3NpIGNvbnNpZMOpcsOpcyBjb21tZSAqQmxhbmsqLg0KLSBQbHVzaWV1cnMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMgc291cyBgRmFjZXR0ZXNgIGV0IGDDiWRpdGVyIGxlcyBjZWxsdWxlc2AgcGVybWV0dGVudCBkZSBnw6lyZXIgY2VzIHR5cGVzIGRlIHZhbGV1cnMuDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlRyYW5zZm9ybWVyIHVuZSBjb2xvbm5lIGRhdGUgZGUgZm9ybWF0IGNhcmFjdMOocmUgZW4gZm9ybWF0IGRhdGUqKjogIA0KLSBEYW5zIGxhIGNvbG9ubmUgKkpvdXIgY2FsZW5kYWlyZSo6IGBNZW51IC0+IMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAgICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCi0gw4AgbCdpbXBvcnRhdGlvbiBkJ3VuIGZpY2hpZXIsIGNoYXF1ZSBjZWxsdWxlIHNlIHZlcnJhIGF0dHJpYnVlciB1biBmb3JtYXQuIA0KLSBQYXIgZMOpZmF1dCwgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZXN0IGRlIGZvcm1hdCBjaGHDrm5lcy4gIA0KLSBMZSBjb250ZW51IGRlcyBjZWxsdWxlcyByZWNvbm51IGNvbW1lIG51bcOpcmlxdWUgZXQgZGF0ZSBzZXJhIGRlIGNvdWxldXIgdmVydGUuICANCi0gTGUgZm9ybWF0IHBldXQgw6p0cmUgbW9kaWZpw6kgZGUgZGlmZsOpcmVudGVzIGZhw6dvbnM6IEJvdXRvbiBgZWRpdGAsIGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCwgRmVuw6p0cmUgR1JFTC4gIA0KLSBDZSBmb3JtYXQgYXVyYSB1biBpbXBhY3Qgc3VyIGxlcyBhY3Rpb25zIHBvc3NpYmxlcy4gIA0KLSBMZSBjaGFuZ2VtZW50IGRlIGZvcm1hdCBwYXIgw6lkaXRpb24gZGlyZWN0ZSBkJ3VuZSBjZWxsdWxlIGVzdCB1bmUgb3DDqXJhdGlvbiBkaXN0aW5jdGUgZGUgbGEgdHJhbnNmb3JtYXRpb24gZHUgY29udGVudS4gTGEgcHJlbWnDqHJlIG9ww6lyYXRpb24gYXJyaXZlIHBhcmZvaXMgw6AgY2hhbmdlciBkZXMgZm9ybWF0cyBxdWUgbGEgdHJhbnNmb3JtYXRpb24gbmUgcGV1dCBmYWlyZS4NCi0gUG91ciBwbHVzIGQnaW5mb3JtYXRpb24gc3VyIGxlcyBmb3JtYXRzLCB2b2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwbG9yaW5nKS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMy4gTGEgZ2VzdGlvbiBkZXMgbGlnbmVzIGV0IGNvbG9ubmVzDQoNCiMjIyMgTGEgZ2VzdGlvbiBkZXMgY29sb25uZXMgcGV1dCBzZSBmYWlyZToNCg0KLSBTdXIgY2hhcXVlIGNvbG9ubmU6IA0KICAtIEZvbmN0aW9ucyBzb3VzIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRMOpcGxhY2VyIC4uLiAvIFJlbm9tbWVyIC8gU3VwcHJpbWVyYCAgIA0KICAtIEZvbmN0aW9ucyBzb3VzIGBBcGVyw6d1IC0+IE1hc3F1ZXIuLi4gYCAgIA0KDQo8L2JyPg0KDQotIFN1ciBsYSBjb2xvbm5lIGBUb3V0ZXNgOiAgICAgDQogIC0gYMOJZGl0ZXIgbGVzIGNvbG9ubmVzIC0+IFJldHJpZXItc3VwcHJpbWVyLCBnZXN0aW9uIGRlcyB2YWxldXJzIGNvbnPDqWN1dGl2ZXNgICAgIA0KICAtIGBBcGVyw6d1IC0+IEFmZmljaGVyLW1hc3F1ZXJgLi4uICANCg0KPC9icj4NCg0KIyMjIyBMYSBnZXN0aW9uIGRlcyBsaWduZXM6DQoNCi0gTGEgc8OpbGVjdGlvbiBkZSBsaWduZXMgcGV1dCBzZSBmYWlyZSBwYXIgbGUgYmlhaXMgZGUgZmlsdHJlcywgZmFjZXR0ZXMgZXQgYXV0cmVzIG1hbmlwdWxhdGlvbnMgcGVyc29ubmFsaXPDqWVzLiAgDQotIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBtYXJxdWVyL8OpdG9pbGVyIGRlcyBsaWduZXMgZW4gbG90IG91IGluZGl2aWR1ZWxsZW1lbnQgcHVpcyBkZSBjcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgYFRvdXRlc2AgcG91ciBzw6lsZWN0aW9ubmVyIGxlcyBsaWduZXMgbWFycXXDqWVzIChgdHJ1ZWApLiAgDQotIE9uIHBldXQgZW5zdWl0ZSBzdXBwcmltZXIgbGVzIGxpZ25lcyBmaWx0csOpZXM6IGBUb3V0ZXMgLT4gw4lkaXRlciBsZXMgbGlnbmVzIC0+IFN1cHByaW1lciBsZXMgbGlnbmVzIGNvcnJlc3BvbmRhbnRlc2AuICANCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqU3VwcHJpbWVyIHVuZSBjb2xvbm5lOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUeXBlIGQnaW5jaWRlbnQqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gU3VwcHJpbWVyIGNldHRlIGNvbG9ubmVgLiAgDQoNCioqU3VwcHJpbWVyIHBsdXNpZXVycyBjb2xvbm5lczogKiogIA0KLSBTdXIgbGEgY29sb25uZSAqVG91dGVzKiAtPiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IMOJZGl0ZXIvU3VwcHJpbWVyIGxlcyBjb2xvbm5lc2AgLT4gKktGUyogZXQgKkNBVCouICANCg0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDUuNC4gSGlzdG9yaXF1ZSAoVW5kby9SZWRvKQ0KDQotIFRvdXRlcyBsZXMgYWN0aW9ucyBzb250IGVucmVnaXN0csOpZXMgKGxvZyBkZSBzZXMgbWFuaXB1bGF0aW9ucykgZXQgcGV1dmVudCDDqnRyZSBhbm51bMOpZXMgZW4gcmVjdWxhbnQgw6l0YXBlIHBhciDDqXRhcGUgZGFucyBsJ2hpc3RvcmlxdWUuICANCi0gTGEgcHJlbWnDqHJlIGFjdGlvbiBkJ3VuIGhpc3RvcmlxdWUgZXN0IGxhIGNyw6lhdGlvbiBkdSBwcm9qZXQuICANCi0gUHVpc3F1ZSBsJ2hpc3RvcmlxdWUgZmFpdCBwYXJ0aWUgZHUgcHJvamV0IGVucmVnaXN0csOpIGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsLCBpbCBuZSBkaXNwYXJhaXQgcGFzIMOgIGxhIGZlcm1ldHVyZSBkZSBsYSBzZXNzaW9uLiANCi0gTCdoaXN0b3JpcXVlIHBldXQgw6p0cmUgZXh0cmFpdCBlbiBmb3JtYXQgSlNPTiwgY29waWVyL2NvbGxlciBkYW5zIG5vdGVwYWQgZXQgYXBwbGlxdWVyIGRlIG5vdXZlYXUuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTkuanBnKXt3aWR0aD02MCV9DQoNCjwvY2VudGVyPiAgDQoNCioqQXR0ZW50aW9uISoqDQoNCi0gU2kgb24gcmVjdWxlIGRhbnMgbGUgdGVtcHMgZXQgcXUnb24gZmFpdCB1bmUgbW9kaWZpY2F0aW9uLCBsZXMgw6l0YXBlcyBxdWkgc3VpdmVudCBkYW5zIGwnaGlzdG9yaXF1ZSBkaXNwYXJhaXNzZW50IHBvdXIgZGUgYm9uLiAgDQoNCi0gTGVzIG1hbmlwdWxhdGlvbnMgcmVsYXRpdmVzIMOgIGwnYWZmaWNoYWdlIG5lIHNvbnQgcGFzIGVucmVnaXN0csOpZXMgZGFucyBsJ2hpc3RvcmlxdWUsIHNldWxlbWVudCBsZXMgdHJhbnNmb3JtYXRpb25zLiBMJ2VucmVnaXN0cmVtZW50IGF1dG9tYXRpcXVlIG5lIGNvbXByZW5kIGRvbmMgcGFzIGxlcyBmYWNldHRlcyBldCBmaWx0cmVzICh2dWUgZGUgbCdpbnRlcmZhY2UpIC0gcGVyZCBjZSBxdWkgbidhcHBhcmFpdCBwYXMgZGFucyBsZSBgRMOpZmFpcmUvUmVmYWlyZWAuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIGRhbnMgbGVzIGNlbGx1bGVzIGFwcGFyYWl0IGRhbnMgbCdoaXN0b3JpcXVlIG1haXMgbmUgcGV1dCDDqnRyZSBleHBvcnTDqWUuICANCg0KLSBGYWNldHRlcyBldCBmaWx0cmVzIHMnZW5yZWdpc3RyZW50IGdyw6JjZSBhdSBgcGVybWFsaWVuYC4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDYuIE1lbnUgZXQgdHlwZXMgZGUgZm9uY3Rpb25zDQoNCk9wZW4gUmVmaW5lIHBlcm1ldCBkZSB0cmF2YWlsbGVyIGRlICoqZGV1eCBmYcOnb25zKio6ICANCg0KDQoxLiBBdmVjIGwnZW5zZW1ibGUgZGVzICoqZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMqKiBxdWUgbCdvbiByZXRyb3V2ZSBkYW5zIGxlcyBtZW51cy4NCg0KMi4gRW4gcsOpZGlnZWFudCBzZXMgcHJvcHJlcyBbZXhwcmVzc2lvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMpIGF2ZWMgbGUgKipsYW5nYWdlIEdSRUwqKi4gIA0KDQogIC0gTcOqbWUgbG9yc3F1ZSBsJ29uIHV0aWxpc2UgbGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBpbCBlc3QgcG9zc2libGUgZCdlbiBtb2RpZmllciBsZSBmb25jdGlvbm5lbWVudCBlbiDDqWRpdGFudCBkaXJlY3RlbWVudCBsYSBzeW50YXhlIEdSRUwgY29ycmVzcG9uZGFudGUuIA0KDQo8L2JyPg0KDQojIyA2LjEuIFV0aWxpc2VyIGxlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llczoNCg0KLSBMZSBtZW51IGV0IGwnZW5zZW1ibGUgZGUgc2VzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGFwcGFyYWlzc2VudCBlbiBjbGlxdWFudCBzdXIgbGEgZmzDqGNoZSBkZSBsJ2ludGl0dWzDqSBkZSBjaGFxdWUgY29sb25uZS4NCg0KLSBMZXMgZm9uY3Rpb25zIGRpc3BvbmlibGVzIHNvdXMgbGUgbWVudSBkZSBsYSBwcmVtacOocmUgY29sb25uZSBgVG91dGVzYCBzZSBkaXN0aW5ndWVudCBkZXMgYXV0cmVzIHB1aXNxdSdlbGxlcyBwZXJtZXR0ZW50IGQnYXBwbGlxdWVyIGRlcyBmb25jdGlvbnMgw6AgbCdlbnNlbWJsZSBkZXMgY29sb25uZXMgZHUgZmljaGllcjogTWFycXVlciwgw6l0b2lsZXIsIHN1cHByaW1lciwgbWFzcXVlci4uLg0KDQo8L2JyPg0KDQoqKk1lbnUgZXQgZm9uY3Rpb25zIGRlIGxhIGNvbG9ubmUgYFRvdXRlc2AqKg0KDQoNCiFbXShpbWFnZXMvT1IyMS5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKipNZW51IGV0IGZvbmN0aW9ucyBkZSBjaGFxdWUgY29sb25uZS12YXJpYWJsZSoqDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxMi5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKioqDQoNCiMjIDYuMi4gw4ljcmlyZSBzZXMgZm9uY3Rpb25zIGF2ZWMgR1JFTA0KDQo8L2JyPg0KDQpFeHByZXNzaW9ucyBzaW1pbGFpcmVzIGF1eCBmb3JtdWxlcyBFeGNlbCBtYWlzIHF1aSBzJ2FwcGxpcXVlbnQgYXV4IGNvbG9ubmVzLCBub24gYXV4IGNlbGx1bGVzLCBldCBxdWkgbmUgc29udCBwYXMgc3RvY2vDqWVzIMOgIG3Dqm1lIGxlcyBkb25uw6llcyBtYWlzIGRhbnMgdW4gc2NyaXB0LiAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxNC5qcGcpDQoNCg0KPC9icj4NCg0KIyMjIyBMZSBsYW5nYWdlIEdSRUwgcGV1dCBzJ3V0aWxpc2VyIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiAgDQoNCi0gRW4gY3LDqWFudCBkZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIDogYEZhY2V0dGUgLT4gRmFjZXR0ZSB0ZXh0dWVsbGUgcGVyc29ubmFsaXPDqWVgLiAgDQoNCi0gRW4gdHJhbnNmb3JtYW50IHVuZSBjb2xvbm5lOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gdHJhbnNmb3JtZXJgIChhdXNzaSBzb3VzIGBUb3V0ZXMgLT4gVHJhbnNmb3JtZXJgKS4gIA0KDQotIEVuIGNyw6lhbnQgdW5lIG5vdXZlbGxlIGNvbG9ubmU6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBiYXPDqWUgc3VyIGNldHRlIGNvbG9ubmVgLiAgDQoNCjwvYnI+DQoNCioqTGVzIGZpbHRyZXMgZXQgbGVzIHRyYW5zZm9ybWF0aW9ucyBwbHVzIGNvbXBsZXhlcyBwZXV2ZW50IGF1c3NpIG7DqWNlc3NpdGVyIGwndXNhZ2UgZCdbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIChyZWdleCldKGh0dHBzOi8vcmVnZXgxMDEuY29tLykqKg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyA2LjMuIFRyaWVyIHVuIGZpY2hpZXINCg0KLSBMZXMgZG9ubsOpZXMgYXBwYXJhaXNzZW50IGRhbnMgbCdvcmRyZSBkdSBmaWNoaWVyIG9yaWdpbmFsLg0KLSBQb3VyIG1vZGlmaWVyIGwnb3JkcmUgZCdhcHBhcml0aW9uIGRlcyBvYnNlcnZhdGlvbnMsIGFwcGxpcXVlciB1biBvdSBkZXMgdHJpcyBzdXIgbGVzIGNvbG9ubmVzIGF2ZWMgYFRyaWVyLi4uYA0KLSBQb3VyIGNvbWJpbmVyIHBsdXNpZXVycyB0cmlzIHN1ciBkaWZmw6lyZW50ZXMgY29sb25uZXM6IEZhaXJlIHVuIHRyaWUgc3VyIHVuZSBjb2xvbm5lIHB1aXMgc3VyIHVuZSBhdXRyZSBlbiBtb2RpZmlhbnQgc2kgbsOpY2Vzc2FpcmUgbCdvcHRpb24gYFRyaWVyIHNlbG9uIGNldHRlIHNldWxlIGNvbG9ubmVgLg0KLSBMZXMgdHJpcyBuZSBzb250IHF1ZSB0ZW1wb3JhaXJlcyBldCBuJ2FmZmVjdGVudCBkb25jIHF1ZSBsJ2FmZmljaGFnZS4gUG91ciBxdSdpbHMgc29pZW50IHBlcm1hbmVudHMgKHJlbnVtw6lyb3RhdGlvbiBkZXMgbGlnbmVzKTogYFRyaWVyIC0+IFJldHJpZXIgbGVzIGxpZ25lcyBkZSBmYcOnb24gcGVybWFuZW50ZWAqLiAgDQotIElsIGVzdCBwb3NzaWJsZSBkZSBzdXBwcmltZXIgZXQgZCdpbnZlcnNlciBsZSB0cmkgw6AgcGFydGlyIGRlcyBvcHRpb25zIHN1ciBjaGFxdWUgY29sb25uZSBvdSBncsOiY2Ugw6AgbGEgZm9uY3Rpb24gYFRyaWVyYCBkdSBoYXV0LiAgDQoNCiAqTGUgdHJpIHBlcm1hbmVudCBhZmZlY3RlIHRvdXQgbGUgZmljaGllciwgcGFzIHNldWxlbWVudCBsYSB2dWUgZmlsdHLDqWUuICANCg0KIVtdKGltYWdlcy9PUjYuanBnKSANCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgSm91ciBjYWxlbmRhaXJlYCBlbiBgZGF0ZSBhbnTDqWNocm9ub2xvZ2lxdWVgLiAgDQotIFF1ZWxsZSBlc3QgbGEgZGVybmnDqHJlIGRhdGUgZCdpbmNpZGVudCBlbnJlZ2lzdHLDqWUgZGFucyBsZSBmaWNoaWVyID8gIA0KLSBTdXBwcmltZXIgbGUgdHJpLiAgDQo8L2Rpdj4NCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFRyaWVyIGxlcyB2YWxldXJzIGRlcyBjZWxsdWxlcyBjb21tZSB0ZXh0ZSBkZSBsYSBjb2xvbm5lIGBNb2lzIENhbGVuZHJpZXJgIC4gICANCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGVzIGNlbGx1bGVzIGNvbW1lIHRleHRlIGRlIGxhIGNvbG9ubmUgYEpvdXIgZHUgbW9pc2AuICANCi0gRXhwbG9yZXIgbGUgcsOpc3VsdGF0Li4uICAgDQotIFN1cHByaW1lciBsZSB0cmkgZXQgcmVjb21tYW5jZXIgbGEgcHJvY8OpZHVyZSBhdmVjIHVuIHRyaSBkZSBmb3JtYXQgbm9tYnJlLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNi40LiBGaWx0cmVyIGxlIHRleHRlDQoNCi0gTGEgZm9uY3Rpb24gYEZpbHRyZXIgbGUgdGV4dGVgIHBlcm1ldCBkZSBjaGVyY2hlciB1bmUgb3UgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcy4gIA0KLSBQZXJtZXQgZGUgcmVjaGVyY2hlciBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBkYW5zIHVuZSBjb2xvbm5lIGV0IGRlIGNvbWJpbmVyIGRlcyBmaWx0cmVzIGFwcGxpcXXDqXMgc3VyIHBsdXNpZXVycyBjb2xvbm5lcyBwb3VyIHJhZmZpbmVyIGxhIHJlY2hlcmNoZS4gIA0KLSBGb25jdGlvbiBwbHVzIGV4cMOpZGl0aXZlIHF1ZSBsZXMgZmFjZXR0ZXMgcXVhbmQgb24gbmUgdmV1dCBxdWUgY2hlcmNoZXIgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcy4gIA0KLSBMJ2FmZmljaGFnZSBkZXMgbGlnbmVzIHNlIGxpbWl0ZXJhIGF1IG5vbWJyZSBkZSBjYXMgY29ycmVzcG9uZGFudHMgYXV4IGNyaXTDqHJlcyBkZSByZWNoZXJjaGUgaW5zY3JpdHMgZGFucyBsZXMgYm9pdGVzIGRlIGZpbHRyZXMuICANCi0gKipUYW50IHF1ZSBsZXMgZmlsdHJlcyBzZXJvbnQgYWN0aWZzLCBsZXMgYWN0aW9ucyBzdWJzw6lxdWVudGVzIHNlIGxpbWl0ZXJvbnQgw6AgY2VzIGNhcyBmaWx0csOpcy4qKiAgDQoNCiFbXShpbWFnZXMvT1I3LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEZpbHRyZXIgbGUgdGV4dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSo6ICJiZXJyaSIgIA0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpIZXVyZSBkZSBsJ2luY2lkZW50KjogIjEyIiAgDQotIEV4cGxvcmVyIGxlcyByw6lzdWx0YXRzICANCi0gQ29tbWVudCBzJ2Fzc3VyZXIgZCdhdm9pciBzZXVsZW1lbnQgbGVzIGNhcyBzdXJ2ZW51cyBlbnRyZSAxMmggZXQgMTNoPyBDb21iaWVuIGRlIGxpZ25lcyBjb3JyZXNwb25kZW50IMOgIGNlcyBjb25kaXRpb25zP15bMTI6IG91IGV4cHJlc3Npb24gcmF0aW9ubmVsbGUgXjEyXSAgDQotIFN1cHByaW1lciB0b3VzIGxlcyBmaWx0cmVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgNy4gTGVzIGZhY2V0dGVzDQoNCiMjIDcuMSBDYXJhY3TDqXJpc3RpcXVlcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IzNC5qcGciICB3aWR0aD0iNjAlIiAvPg0KPC9kaXY+DQoNCi0gTGVzIGZhY2V0dGVzIGNvbnN0aXR1ZW50IGxhIG1hcnF1ZSBkZSBjb21tZXJjZSBkJ09wZW5SZWZpbmUsIGQnb8O5IGxlIGxvZ28hIA0KDQotIEZvbmN0aW9ubmFsaXTDqSBwdWlzc2FudGUgcXVpIHBlcm1ldCBkJ2V4cGxvcmVyIGV0IGRlIGZpbHRyZXIgc2VzIGRvbm7DqWVzIGVuIGZvbmN0aW9uIGRlIGRpZmbDqXJlbnRlcyBjb25kaXRpb25zLiAgDQoNCi0gTidhZmZlY3RlbnQgcGFzIGRpcmVjdGVtZW50IGxlcyBkb25uw6llcywgc2V1bGVtZW50IGxhIHByw6lzZW50YXRpb24uICANCg0KLSDDgCBsYSBiYXNlLCB1bmUgZmFjZXR0ZSBjb3JyZXNwb25kIMOgIGxhIGxpc3RlIGRlcyB2YWxldXJzIHBvc3NpYmxlcyBkJ3VuZSB2YXJpYWJsZSAgKGV0IGRlIGxldXIgb2NjdXJyZW5jZSkgcHLDqXNlbnTDqWUgc2Vsb24gbGUgZm9ybWF0IChjaGFpbmUsIG51bcOpcmlxdWUsIGRhdGUpLiAgDQoNCi0gUGVybWV0dGVudCB1bmUgZXhwbG9yYXRpb24gZXQgbWFuaXB1bGF0aW9uIGRlcyB2YWxldXJzIHBvc3NpYmxlcyBldCBkZSBsZXVycyBjYXMgY29ycmVzcG9uZGFudHMgcGx1cyDDqWxhYm9yw6llcyBxdWUgbGVzIGZpbHRyZXMuICANCg0KLSBPbiBwZXV0IGFpbnNpIGlkZW50aWZpZXIgbGVzIHRlbmRhbmNlcywgbGVzIHLDqWd1bGFyaXTDqXMsIGxlcyBlcnJldXJzLCBsZXMgw6ljYXJ0cywgbGVzIHLDqXDDqXRpdGlvbnMgZXQgIGNpYmxlciBsZXMgdmFsZXVycyBkZSBzb3VzLWdyb3VwZXMgcHLDqWNpcy4gIA0KDQotIENlcyBzb3VzLWdyb3VwZXMgcGV1dmVudCBlbnN1aXRlIMOqdHJlIMOpZGl0w6lzIGV0IGV4cG9ydMOpcyAoYm91dG9uIGBFeHBvcnRlcmAgZW4gaGF1dCDDoCBkcm9pdGUpLiANCg0KPC9icj4NCg0KIyMjIERldXggdHlwZXMgZGUgZmFjZXR0ZXM6DQoNCiAgLSBMZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcyAqKlsxXSoqLiAgIA0KICA8L2JyPg0KICAtIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgKipbMl0qKi4gIA0KICA8L2JyPg0KICAgIC0gSWwgZXN0IGF1c3NpIHBvc3NpYmxlIGRlIGNyw6llciBzZXMgcHJvcHJlcyBmYWNldHRlcyBncsOiY2UgYXUgbGFuZ2FnZSBHUkVMIHBvdXIgZMOpZmluaXIgZGVzIGNvbmRpdGlvbnMgZGUgc8OpbGVjdGlvbi9maWx0cmUgdHLDqHMgcHLDqWNpc2VzICoqWzNdKiogKG9uIHBhcmxlIGVuY29yZSBpY2kgZGUgKmZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyosIG1haXMgZWxsZXMgZG9pdmVudCDDqnRyZSByw6lkaWfDqWVzIG1hbnVlbGxlbWVudCkuDQoNCjwvYnI+DQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIzLmpwZykNCg0KPC9jZW50ZXI+ICANCiAgICAtICoqWzhdKiogTGUgbGllbiBgY2hhbmdlcmAgcGVybWV0IGQnb3V2cmlyIHVuZSBmZW7DqnRyZSBkJ8OpZGl0aW9uIEdSRUwgcG91ciBtb2RpZmllciBsYSBzeW50YXhlIGRlIGxhIGZhY2V0dGUuICANCiAgICAtICoqWzldKiogUG91ciBzdXBwcmltZXIgbGVzIGZhY2V0dGVzLCBjbGlxdWVyIHN1ciBsZSB4IGRlIGNoYXF1ZSBmZW7DqnRyZSBvdSBgVG91dCBzdXBwcmltZXJgLiAgDQogICAgLSBQb3VyIGNvbnNlcnZlciBsZXMgZmVuw6p0cmVzIG1haXMgc3VwcHJpbWVyIGxlcyBzw6lsZWN0aW9ucyBxdWkgeSBvbnQgw6l0w6kgZmFpdGVzLCBjbGlxdWVyIHN1ciBgcsOpaW50aWFsaXNlcmAgc3VyIGNoYXF1ZSBmZW7DqnRyZSBvdSBgVG91dCByw6lpbml0aWFsaXNlcmAgKipbOV0qKi4gIA0KICAgIC0gKipbMTBdKiogT3B0aW9uIGBHcm91cGVgOiBPdXRpbHMgcHJvcG9zYW50IGRpZmbDqXJlbnRzIGFsZ29yaXRobWVzIGRlIHNpbWlsYXJpdMOpIHBlcm1ldHRhbnQgZGUgcmVncm91cGVyIGRlcyBjYXTDqWdvcmllcyBzZW1ibGFibGVzLiAgDQoNCg0KIyMjIFRyb2lzIGZvcm1hdHMgZGUgZmFjZXR0ZXM6DQoNCk9uIHJldHJvdXZlIMOpZ2FsZW1lbnQgZGlmZsOpcmVudHMgKipmb3JtYXRzIGRlIGZhY2V0dGVzKiogLT4gdW5lIHBvdXIgY2hhcXVlIGZvcm1hdCBkZSBkb25uw6llcyAoTGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyBwcm9wb3NlbnQgYXVzc2kgZGVzIGZhY2V0dGVzIGJvb2zDqWVubmVzKS4gICANCg0KDQojIyMjIDEuIEZhY2V0dGUgdGV4dHVlbGxlICoqWzQtNV0qKiANCg0KLSBUeXBlIGRlIGZhY2V0dGUgbGUgcGx1cyBzb3V2ZW50IHV0aWxpc8OpLiAgIA0KLSBSZWdyb3VwZW50IGRhbnMgbGEgZmVuw6p0cmUgZGUgZ2F1Y2hlIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgKHRleHR1ZWxsZXMgb3UgbnVtw6lyaXF1ZXMpIGRlcyBjb2xvbm5lcyB2b3VsdWVzLiAgIA0KICAtIE9uIHBldXQgZmFpcmUgdW5lIGZhY2V0dGUgdGV4dHVlbGxlIHN1ciB1bmUgY29sb25uZSBudW3DqXJpcXVlIG1haXMgcGFzIGwnaW52ZXJzZS4gIA0KICAtIDIwMDAgdmFsZXVycyBtYXhpbXVtIHBhciBkw6lmYXV0IG1haXMgcGV1dCDDqnRyZSBtb2RpZmnDqSBkYW5zIGxlcyBwcsOpZsOpcmVuY2VzLiBTaSBsZXMgdmFsZXVycyBzb250IHRyb3Agbm9tYnJldXNlcywgZWxsZXMgbmUgc2Vyb250IHBhcyBsaXN0w6llcyAodW4gZmlsdHJlIHBvdXJyYWl0IMOqdHJlIHV0aWxpc8OpKS4gDQotIFBlcm1ldHRlbnQgZGUgY29tYmluZXIgZGlmZsOpcmVudHMgZmlsdHJlcyBlbiBzw6lsZWN0aW9ubmFudCBkaWZmw6lyZW50ZXMgdmFsZXVycyBkJ3VuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzIChldCBsZXVycyBjYXMgY29ycmVzcG9uZGFudHMpLiAgIA0KICAtIENsaXF1ZXIgYGluY2x1cmVgIG91IGBleGNsdXJlYCBwb3VyIHPDqWxlY3Rpb25uZXIgb3Ugc3VwcHJpbWVyIGRlcyBjaG9peCBtdWx0aXBsZXMgKipbMTJdKiouICAgDQogIC0gVW5lIGZvaXMgbGEgc8OpbGVjdGlvbiBmYWl0ZSwgbCdvcHRpb24gYGludmVyc2VyYCBwZXJtZXQgZGUgc8OpbGVjdGlvbm5lciB0b3V0IFNBVUYgbGEgc8OpbGVjdGlvbiAqKlsxMV0qKi4gICANCiAgLSBQZXV2ZW50IMOqdHJlIHRyacOpZXMgc2Vsb24gbGUgbm9tIG91IGxlIGNvbXB0ZSAobm9tYnJlIGQnb2NjdXJyZW5jZXMpLiAgIA0KLSBQZXJtZXR0ZW50ICoqZOKAmcOpZGl0ZXIgbGVzIHZhbGV1cnMqKiAoY29udGVudSBkZSBjaGFxdWUgY2VsbHVsZSBjb3JyZXNwb25kYW50ZSkgKipbMTNdKiouICANCg0KDQojIyMjIDIuIEZhY2V0dGUgbnVtw6lyaXF1ZSAqKls3XSoqDQoNCi0gVmlzdWFsaXNlciBldCBzw6lsZWN0aW9ubmVyIGxlcyB2YWxldXJzIGTigJl1bmUgdmFyaWFibGUgbnVtw6lyaXF1ZSBhbGxhbnQgZGUgbGEgcGx1cyBwZXRpdGUgw6AgbGEgcGx1cyBncmFuZGUuICANCg0KDQojIyMjIDMuIEZhY2V0dGUgY2hyb25vbG9naXF1ZSAqKls2XSoqDQoNCi0gVmlzdWFsaXNlciBldCBzw6lsZWN0aW9ubmVyIGxlcyB2YWxldXJzIGTigJl1bmUgY29sb25uZSBkYXRlIGVuIGxpZ25lIGR1IHRlbXBzLiAgDQoNCg0KDQoNCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipGaWx0cmVyKiogDQoNCi0gRXhwbG9yZXIgbGVzIHZhbGV1cnMgZGUgbGEgdmFyaWFibGUgKkNhdXNlIHByaW1haXJlKi4gUXVlbGxlIGVzdCBsYSBkZXV4acOobWUgcGx1cyBmcsOpcXVlbnRlPyANCi0gUXVlbGxlcyBzb250IGxlcyBjYXTDqWdvcmllcyBkZSAqQ2F1c2Ugc2Vjb25kYWlyZSogcmVsacOpZXMgw6AgbGEgKkNhdXNlIHByaW1haXJlICJDbGllbnTDqGxlIio/ICAgDQotIFF1ZWxsZSBlc3QgbGEgcGx1cyBmcsOpcXVlbnRlPyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gQ29tYmllbiBkZSBjYXMgY29ycmVzcG9uZGVudCDDoCBjZXR0ZSBzw6lsZWN0aW9uPyAgDQotIMOAIHF1ZWwgKmpvdXIgZGUgbGEgc2VtYWluZSogY2V0dGUgY2F1c2UgZXN0LWVsbGUgc3VydmVudWUgbGUgcGx1cyBzb3V2ZW50P15bQ2xpZW50w6hsZSAvIEJsZXNzw6llIG91IG1hbGFkZSwgTcOpZmFpdCB2b2xvbnRhaXJlLCBOdWlzYW5jZSBpbnZvbG9udGFpcmUgLyBNw6lmYWl0IHZvbG9udGFpcmUgNzgxLyA1XSAgIA0KLSBSw6lpbml0aWFsaXNlciB0b3V0ZXMgbGVzIGZhY2V0dGVzLg0KDQoqKsOJZGl0ZXIqKiAgDQoNCi0gRGFucyBsYSBmYWNldHRlICpDYXVzZSBwcmltYWlyZSosIHJlbm9tbWVyIGxhIHZhbGV1ciAjTkQgLT4gTkEuICANCi0gQ29ycmlnZXIgbGEgdmFsZXVyICJhdXRyZSIgcG91ciBxdSdlbGxlIHNvaXQgZnVzaW9ubsOpZSDDoCBsYSB2YWxldXIgIkF1dHJlcyIuICANCi0gU3VwcHJpbWVyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipGaWx0cmVyKiogDQoNCi0gUXVlbCBlc3QgbGUgKnN5bXB0b21lKiBsZSBwbHVzIGZyw6lxdWVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gU3VyIHF1ZWxsZSAqTGlnbmUqIGNlICpzeW1wdG9tZSogcydlc3QgcHJvZHVpdCBsZSBwbHVzIHNvdXZlbnQ/IFPDqWxlY3Rpb25uZXIgY2V0dGUgdmFsZXVyLiAgDQotIENlcyDDqXbDqW5lbWVudHMgb250LWlscyBuw6ljZXNzaXTDqSB1bmUgKsOpdmFjdWF0aW9uKj9eW0NsaWVudMOobGUgLyBMaWduZSBvcmFuZ2UgLyBPdWkgMTddICAgICANCg0KKirDiWRpdGVyKiogIA0KLSDDiWRpdGVyIGxhIHZhcmlhYmxlICrDqXZhY3VhdGlvbiogZGUgZmHDp29uIMOgIGNlIHF1J2lsIG4neSBhaXQgcXVlICoqZGV1eCB2YWxldXJzKiogcG9zc2libGVzOiBPdWkgZXQgTm9uLiAgDQo8L2Rpdj4NCg0KKioqDQoNCg0KIyMgNy4yLiBMZXMgcmVncm91cGVtZW50cyAoY2x1c3RlcmluZykNCg0KLSBGb25jdGlvbiBxdWkgcGVybWV0IGQnaWRlbnRpZmllciBkYW5zIHVuZSBjb2xvbm5lIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgcXVpIHBvdXJyYWllbnQgYXZvaXIgbGEgbcOqbWUgc2lnbmlmaWNhdGlvbiBvdSBxdWkgcG91cnJhaWVudCDDqnRyZSByZWdyb3Vww6llcyBkYW5zIHVuZSBtw6ptZSBjYXTDqWdvcmllID0gInZhcmlhdGlvbnMgc3VyIGxlIG3Dqm1lIHRow6htZSIgw6l2YWx1w6llcyBlbiBmb25jdGlvbiBkZSBbZGlmZsOpcmVudHMgYWxnb3JpdGhtZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9DbHVzdGVyaW5nLUluLURlcHRoKS4gDQoNCi0gQ2hhcXVlIHN1Z2dlc3Rpb24gZG9pdCDDqnRyZSBhcHByb3V2w6llIGluZGl2aWR1ZWxsZW1lbnQgcG91ciBxdWUgbGVzIG1vZGlmaWNhdGlvbnMgcydhcHBsaXF1ZW50IChsZXMgcmVncm91cGVtZW50cyBwcm9wb3PDqXMgbmUgc29udCBwYXMgbsOpY2Vzc2FpcmVtZW50IHBlcnRpbmVudHMpLg0KDQotIE9wZW5SZWZpbmUgcHJvcG9zZSBkZXMgKmNsdXN0ZXJzKiBzZWxvbiBkaWZmw6lyZW50ZXMgbcOpdGhvZGVzIHBsdXMgb3UgbW9pbnMgw6lsYWJvcsOpZXMgKCpQcm9jaGUgdm9pc2luKiBwcmVuZCBwbHVzIGRlIG3DqW1vaXJlKSBxdWkgcGVybWV0dGVudCBkZSByZWdyb3VwZXIgbGVzIHZhbGV1cnMgc2ltaWxhaXJlcyBldCBwcm9wb3NlbnQgZGVzIG1hdGNocyBwb3NzaWJsZXMgKCpmdXp6eSBtYXRjaGluZyopOiBwYXIgZXhlbXBsZSAqZW1wcmVpbnRlKiBlc3QgcGx1cyBjb25zZXJ2YXRldXIgKGRpc3Rpbmd1ZSBjYXNzZSwgZXNwYWNlcywgb3JkcmUsIHLDqXDDqXRpdGlvbiwgcG9uY3R1YXRpb24uLi4pLCAqbmdyYW0qIGVzdCBwbHVzIGZsZXhpYmxlIChtw6ptZXMgY2FyYWN0w6hyZXMpLCAqTWV0YXBob25lMyogZXN0IGxlIHBsdXMgImxpYsOpcmFsIiAobcOqbWUgcHJvbm9uY2lhdGlvbikuDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIENyw6llciB1bmUgZmFjZXR0ZSB0ZXh0dWVsbGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSouICANCi0gQ2xpcXVlciBzdXIgYEdyb3VwZWAgZXQgZXhwbG9yZXIgbGVzIHJlZ3JvdXBlbWVudHMgZW4gZm9uY3Rpb24gZGVzIGRpZmbDqXJlbnRzIGFsZ29yaXRobWVzLiAgDQo8L2Rpdj4NCg0KKioqDQoNCg0KIyMgNy4zLiBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIA0KDQoNCi0gRm9uY3Rpb25uZW50IGNvbW1lIGRlcyBmYWNldHRlcyBhdXRvbWF0aXPDqWVzIHNhdWYgcXUnb24gbmUgcGV1dCDDqWRpdGVyIGVuIGZvbmN0aW9uIGRlIGNlcyByw6lzdWx0YXRzIGNhciBlbGxlcyBwcsOpc2VudGVudCBkZXMgZG9ubsOpZXMgbW9kaWZpw6llcyBlbiBtw6ltb2lyZS4NCg0KLSBPbnQgw6l0w6kgZMOpdmVsb3Bww6llcyBldCBhdXRvbWF0aXPDqWVzIGFmaW4gZCdleHBsb3JlciBkZXMgYXNwZWN0cyBwcsOpY2lzIGRlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIGxlcyAgcsOpZGlnZXIgZW4gc3ludGF4ZSBHUkVMOiANCg0KICAtIGBGYWNldHRlIHBhciBtb3RgIDogRGl2aXNlIGNoYXF1ZSBtb3QgKHPDqXBhcsOpIGQndW4gZXNwYWNlKSBkJ3VuZSBjb2xvbm5lIGV0IGxlcyBwcsOpc2VudGUgZW4gbGlzdGUgZGUgdmFsZXVycyBkaXN0aW5jdGVzIFt2YWx1ZS5zcGxpdCgiICIpXS4NCiAgDQogIC0gYEZhY2V0dGUgZG91YmxvbnNgOiB2YWxldXJzIGJvb2zDqWVubmVzIGluZGlxdWFudCBzaSBsZXMgdmFsZXVycyBzb250IHVuaXF1ZXMgKGZhbHNlKSBvdSBub24gKHRydWUpIFtmYWNldENvdW50KHZhbHVlLCAndmFsdWUnLCAnU3ltcHRvbWUnKSA+IDFdLiAgDQogIA0KICAtIGBGYWNldHRlcyBsb2dhcml0aG1pcXVlc2A6IG1vZGlmaWNhdGlvbiBsb2dhcml0aG1pcXVlIGRlIHZhbGV1cnMgbnVtw6lyaXF1ZXMgW3ZhbHVlLmxvZygpXS4NCiAgDQogIC0gYEZhY2V0dGUgbG9uZ3VldXIgZGUgdGV4dGVgOiBsaXN0ZSBsZSBub21icmUgZGUgY2FyYWN0w6hyZXMgZHUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZSBbdmFsdWUubGVuZ3RoKCldLg0KICANCiAgLSBGYWNldHRlcyBwZXJtZXR0YW50IGQnZXhwbG9yZXIgbGVzIHZhbGV1cnMgZCdgZXJyZXVyYCwgYG51bGxlc2AsIGB2aWRlc2AuLi4gW2lzRW1wdHlTdHJpbmcodmFsdWUpXQ0KDQoqKiogDQoNCg0KIyA4LiBMZSBsYW5nYWdlIEdSRUwgDQoNCg0KLSAqR29vZ2xlIFJlZmluZSBFeHByZXNzaW9uIExhbmd1YWdlKiANCi0gTGFuZ2FnZSBzaW1pbGFpcmUgw6AgamF2YXNjcmlwdCBldCBmb3JtdWxlcyBleGNlbC4gICAgDQotIFBlcm1ldCBsYSByw6lkYWN0aW9uIGQnZXhwcmVzc2lvbnMgdmlzYW50IMOgIG1hbmlwdWxlci90cmFuc2Zvcm1lciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lLiAgDQooVm9pciBsYSBbZG9jdW1lbnRhdGlvbiBvZmZpY2llbGxlXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWwpIHBvdXIgcGx1cyBkZSBkw6l0YWlscykgIA0KLSBMYW5nYWdlIGNvbXBvc8OpIGRlIFtmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZ3JlbGZ1bmN0aW9ucykgZXQgZCdbb2JqZXRzXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zI3ZhcmlhYmxlcykuDQoNCjwvYnI+DQoNCiMjIyAgOC4xLiBHUkVMIC0gUHJpbmNpcGVzIGRlIGJhc2UgDQoNCiMjIyMgVXRpbGlzZSB1bmUgc3ludGF4ZSBwYXJ0aWN1bGnDqHJlIHBvdXIgY2libGVyIGxlcyBvYmpldHMgKHZhcmlhYmxlcyk6ICANCi0gQ29udGVudSBkZSBjb2xvbm5lIGFjdHVlbGxlOiBgdmFsdWVgLiAgICAgDQotIENvbnRlbnUgZCd1bmUgYXV0cmUgY29sb25uZTogYGNlbGxzWydub20tY29sb25uZSddLnZhbHVlYC4gICAgDQotIENvbnRlbnUgdGV4dHVlbDogImd1aWxsZW1ldCBzaW1wbGUgb3UgZG91YmxlIi4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGV1eCBmb3JtYXRzIGRlIG5vdGF0aW9uOiAgDQotIEltYnJpcXXDqWU6ICh0cmltKHRvTG93ZXJjYXNlKHZhbHVlKSkuICAgIA0KLSAqKlPDqXF1ZW50aWVsbGUqKjogdmFsdWUudG9Mb3dlcmNhc2UoKS50cmltKCkgKHBsdXMgZmFjaWxlIMOgIGxpcmUpLiAgICANCg0KPC9icj4NCg0KIyMjIyBEaWZmw6lyZW50cyB0eXBlcyBkZSBmb25jdGlvbnM6ICANCi0gTGVzIGZvbmN0aW9ucyBldCBsZXVyIGNvbXBvcnRlbWVudCBkw6lwZW5kcm9udCBkdSB0eXBlIGRlIGRvbm7DqWVzIG1hbmlwdWzDqWVzLiAgDQotIFtDZXJ0YWluZXMgZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMjc2xpY2VhLW4tZnJvbS1uLXRvLW9wdGlvbmFsKSBwZXJtZXR0ZW50IGRlIHRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgZW4gYGFycmF5c2AgKGxpc3RlIGQnw6lsw6ltZW50cykgZXQgZGUgbGVzIG1hbmlwdWxlci4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyNyZWd1bGFyLWV4cHJlc3Npb25zKSBwZXJtZXR0ZW50IGQndXRpbGlzZXIgbGVzIFtleHByZXNzaW9ucyByw6lndWxpw6hyZXNdKCNleHByZXNzaW9uKS4gIA0KDQo8L2JyPg0KDQojIyMjIERpZmbDqXJlbnRzIHR5cGVzIGQnb3DDqXJhdGV1cnM6ICANClNlbG9uIGxlIGZvcm1hdCwgZGlmZsOpcmVudHMgdHlwZXMgZCcqKm9ww6lyYXRldXJzKiogcGV1dmVudCDDqnRyZSB1dGlsaXPDqXMgZW50cmUgbGVzIHZhbGV1cnM6ICANCgktIE9ww6lyYXRldXJzIGFyaXRobcOpdGlxdWVzOiArLCAtLCAqLCAvICANCgktIE9ww6lyYXRldXJzIGJvb2zDqWVuczogPT0sID4sIDwgIA0KICANCioqUGFyIGV4ZW1wbGU6KioNCg0KLSBMZSAiKyIgZW50cmUgZGV1eCBjb250ZW51cyBudW3DqXJpcXVlcyA9IHNvbW1lDQoNCiFbXShpbWFnZXMvT1IzMC5qcGcpDQoNCi0gTGUgIisiIGF2ZWMgdW4gY29udGVudSB0ZXh0dWVsID0gY29uY2F0w6luYXRpb24NCg0KIVtdKGltYWdlcy9PUjMxLmpwZykNCg0KPC9icj4NCg0KKioqICANCg0KIyMjICA4LjIuIEdSRUwgLSBMJ2luZGV4YXRpb24sIGxhIHPDqWxlY3Rpb24gZXQgbGEgbWFuaXB1bGF0aW9uIGQnw6lsw6ltZW50czogIA0KDQotIENoYXF1ZSBjYXJhY3TDqHJlIGNvbXBvc2FudCBsYSB2YWxldXIgZCd1bmUgY2VsbHVsZSBlc3Qgb3Jkb25uw6kgZGFucyB1biBpbmRleCAqKsOgIHBhcnRpciBkZSAwKiogKDFlciDDqWzDqW1lbnQpLg0KLSBDaGFxdWUgw6lsw6ltZW50IGQndW4gKmFycmF5KiBlc3Qgb3Jkb25uw6kgZGFucyB1biBpbmRleCAqKsOgIHBhcnRpciBkZSAwKiogKDFlciDDqWzDqW1lbnQpIGV0IHBldXQgw6p0cmUgY2libMOpIGdyw6JjZSBhdXggYFsgXWAuICANCi0gTCdvcMOpcmF0ZXVyIGBbIF1gIHBlcm1ldCBkZSBjaWJsZXIvc8OpbGVjdGlvbm5lciBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBvdSBkZXMgc291cy3DqWzDqW1lbnRzIHNww6ljaWZpcXVlcy4gDQoNCj4gYHZhbHVlWzAsOF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gPyAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdLnNwbGl0KCIpIilbMF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/XltNb250csOpYWwgLyBRdcOpYmVjKSAvIFF1w6liZWNdICANCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KYElTQk46IDk3OC0yLTEzLTA4MjkzMC0wYA0KDQpDb21tZW50IGNvbnNlcnZlciBzZXVsZW1lbnQgbGUgY2hpZmZyZSBkZSBsJ0lTQk4gZGFucyBsZXMgdHJhaXRzIGQndW5pb24/Xlt2YWx1ZVs1LDI0XS5yZXBsYWNlKCItIiwgIiIpXQ0KDQpJbmRpY2VzOiBgdmFsdWVgIGV0IGZvbmN0aW9uIGAucmVwbGFjZWANCg0KPC9kaXY+DQoNCioqRXhlbXBsZSAxKioNCg0KYE1hcnRpbm9sbGksIFBhc2NhbDsgR2FicmllbGxpLCBOaW5vOyBGb3J0aWVyLCBDYXRoZXJpbmU7IEJlbGxlbWFyZSwgUGFzY2FsZWANCg0KIVtdKGltYWdlcy9PUjI1LmpwZykNCg0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIikuc29ydCgpLmpvaW4oIjsgIilgIA0KDQohW10oaW1hZ2VzL09SMjYuanBnKQ0KDQotIGBzcGxpdCgpYDogZGl2aXNlIGxhIGNlbGx1bGUgZW4gw6lsw6ltZW50cyBkaXN0aW5jdHMgc3VyIGxhIGJhc2UgZHUgc8OpcGFyYXRldXIgOw0KLSBgc29ydCgpYDogdHJpIGxlcyDDqWzDqW1lbnRzDQotIGBqb2luKClgOiBsZXMgam9pbnRzIGF2ZWMgbGUgc8OpcGFyYXRldXIgOw0KDQo8L2JyPg0KDQoqKkV4ZW1wbGUgMioqICAgDQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgiOyAiKS5zbGljZSgxKS5qb2luKCI7ICIpYCANCg0KIVtdKGltYWdlcy9PUjI3LmpwZykNCg0KLSBgc2xpY2UoKWAgOiBjb25zZXJ2ZSBsZXMgw6lsw6ltZW50cyDDoCBwYXJ0aXIgZGUgbCfDqWzDqW1lbnQgMSBkb25jIHN1cHByaW1lIGxlIDAuIA0KDQo8L2JyPg0KDQoqKkV4ZW1wbGUgMyoqDQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgiOyAiKVsxXS5zcGxpdCgiLCAiKS5yZXZlcnNlKCkuam9pbigiICIpICsgIiBlc3QgbGUgbWVpbGxldXIiYCANCg0KIVtdKGltYWdlcy9PUjM4LmpwZykNCg0KLSBgc3BsaXQoKWA6IGRpdmlzZSBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsNCi0gYHNsaWNlKClgOiByZXRpZW50IGxlIGRldXhpw6htZSDDqWzDqW1lbnQNCi0gYHNwbGl0KClgOiBkaXZpc2UgY2V0IMOpbMOpbWVudCBzdXIgbGUgc8OpcGFyYXRldXIgLA0KLSBgcmV2ZXJzZSgpYDogaW52ZXJzZSBsJ29yZHJlIGRlcyBkZXV4IMOpbMOpbWVudHMNCi0gYGpvaW4oKWA6IHJhdHRhY2hlIGxlcyBkZXV4IMOpbMOpbWVudHMgZGl2aXPDqSBhdmVjIHVuIGVzcGFjZQ0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSogcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgY29tbWVuY2UgcGFyICJDw7R0ZSIgIA0KDQpgdmFsdWUuc3RhcnRzV2l0aCjigJxDw7R0ZeKAnSlgICAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KQ3LDqWVyIHVuZSBmYWNldHRlIHBvdXIgaWRlbnRpZmllciBsZXMgY2FzIGRvbnQgbGEgdmFsZXVyIGRhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGVzdCBsYSBtw6ptZSBxdWUgZGFucyBsYSBjb2xvbm5lICpDYXVzZSBzZWNvbmRhaXJlKg0KDQpgdmFsdWUgPT0gY2VsbHNbIkNhdXNlIHNlY29uZGFpcmUiXS52YWx1ZWAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBwb3VyIGxpc3RlciBsZXMgY2FzIHNlbG9uIGwnKmhldXJlIGRlIGwnaW5jaWRlbnQqIHNldWxlbWVudCwgc2FucyBsZXMgbWludXRlcyAoMiBwcmVtaWVycyBjYXJhY3TDqHJlcykuIENvbW1lbnQgZmFpcmUgYWZmaWNoZXIgbGVzIG1pbnV0ZXMgc2V1bGVtZW50P15bdmFsdWVbMyw1XSBvdSB2YWx1ZS5zdWJzdHJpbmcoMyldIA0KDQpgdmFsdWVbMCwyXWAgICANCg0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQoqKioNCg0KDQojIDkuICBUcmFuc2Zvcm1hdGlvbnMNCg0KLSBPcGVuUmVmaW5lIHBlcm1ldCBkJ2V4cGxvcmVyIG1haXMgYXVzc2kgZGUgbW9kaWZpZXIgc2VzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgdG91Y2hlciBhdSBjb250ZW51IGRlIGNlbGx1bGVzIG1hbnVlbGxlbWVudC4gIA0KDQotIENvbW1lIHBvdXIgbGVzIGZhY2V0dGVzLCBsZXMgZm9uY3Rpb25zIGRlIHRyYW5zZm9ybWF0aW9uIHBldXZlbnQgc2UgZmFpcmUgZGUgZGV1eCBmYcOnb25zOiAgICANCg0KICAxLiBUcmFuc2Zvcm1hdGlvbnMgYXV0b21hdGlzw6llcyAoYFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgKSAqKlsyXSoqOiBmb25jdGlvbnMgcGVybWV0dGFudCBkJ2FwcGxpcXVlciBkZXMgbW9kaWZpY2F0aW9ucyBjb3VyYW50ZXMgc3VyIGxlIGZvcm1hdCBldCBsYSBzdHJ1Y3R1cmUgZGVzIGNlbGx1bGVzL2NvbG9ubmVzLiAgDQogIA0KICAyLiBUcmFuc2Zvcm1hdGlvbnMgbWFudWVsbGVzIGRhbnMgbGEgZmVuw6p0cmUgR1JFTCAqKlsxXSoqIGFmaW4gZCdhbGxlciBiZWF1Y291cCBwbHVzIGxvaW4uICANCiAgDQoNCiFbXShpbWFnZXMvT1IyNC5qcGcpDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQpQb3VyIHZvaXIgbGEgc3ludGF4ZSBjb3JyZXNwb25kYW50IMOgIGNoYXF1ZSBmb25jdGlvbiBkZSBgdHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2AsIGFwcGxpcXVlciBsYSBmb25jdGlvbiBzdXIgdW5lIGNvbG9ubmUgcHVpcyBhbGxlciB2b2lyIGwnaGlzdG9yaXF1ZS4gUGFyIGV4ZW1wbGU6IGB2YWx1ZS50b051bWJlcigpYCwgYHZhbHVlLnRvVGl0bGVjYXNlKClgLCBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1VwcGVyY2FzZSgpYCwgYHZhbHVlLnRyaW0oKWAuLi4gPC9kaXY+DQoNCioqKg0KDQojIyA5LjEuIENyw6llciBldCBjb3BpZXIgZGVzIGNvbG9ubmVzDQoNCjwvYnI+DQoNCmDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lYA0KDQohW10oaW1hZ2VzL09SMzIuanBnKQ0KDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgc3VyIGxhIGJhc2UgZGUgbGEgY29sb25uZSAqSm91ciBkZSBsYSBzZW1haW5lKiBpbmRpcXVhbnQgc2kgbGUgam91ciBlc3QgZW4gc2VtYWluZSBvdSBmaW4gZGUgc2VtYWluZS4NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmBpZih2YWx1ZSA+IDUsImZpbiBkZSBzZW1haW5lIiwic2VtYWluZSIpYA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDcsOpZXIgdW5lIGNvbG9ubmUgw6AgcGFydGlyIGRlIGxhIGNvbG9ubmUgKmhldXJlIGRlIGwnaW5jaWRlbnQqIGVuIG5lIGNvbnNlcnZhbnQgcXVlIGwnaGV1cmUsIHNhbnMgbGVzIG1pbnV0ZXMsIGV0IHJham91dGVyIGxhIGxldHRyZSBoIHBvdXIgZG9ubmVyIHBhciBleGVtcGxlIGNlY2k6IDE1OjEyICAtPiAgMTVoLiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpgdmFsdWUuc3BsaXQoJzonKVswXSArICJoImAuICANCg0KT3UNCg0KYHZhbHVlLnNwbGl0QnlMZW5ndGhzKDIpWzBdYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKiANCg0KDQojIyA5LjIuIERpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzDQoNCi0gKipEZXV4IG9wdGlvbnM6ICoqICANCiAgMS4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZW4gKipwbHVzaWV1cnMgY29sb25uZXMqKjogYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2AgIA0KICAyLiBFbiBkaXZpc2FudCBsZSBjb250ZW51IHN1ciAqKnBsdXNpZXVycyBsaWduZXMqKjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IERpdmlzZXIgbGVzIGNlbGx1bGVzIG11bHRpdmFyacOpZXNgICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjM3LmpwZykgIA0KDQotIExhIHByZW1pw6hyZSBvcHRpb24gZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZS4gDQotIExhIGRldXhpw6htZSBvcHRpb24gYXVyYSB1biBlZmZldCBpbXBvcnRhbnQgc3VyIGxhIHN0cnVjdHVyZSBkZXMgb2JzZXJ2YXRpb25zIHB1aXNxdSdlbGxlIG11bHRpcGxpZXJhIGxlIG5vbWJyZSBkZSBsaWduZXMgcGFyIGNhcyAoY2UgcXVpIG7DqWNlc3NpdGVyYSBkZSBwYXNzZXIgw6AgbGEgdnVlIHBhciBgZW50csOpZXNgKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClRyYW5zZm9ybWVyIGxhIHZhcmlhYmxlICpMaWduZSoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqVW5pZm9ybWlzZXIgbGUgbm9tIGRlcyBsaWduZXM6KiogIA0KDQotIENyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBMaWduZS4gDQoNCi0gRGV1eCBwcm9ibMOobWVzIHNlIHBvc2VudDogMSkgbGVzIG5vbXMgZGUgbGlnbmVzIG5vbiB1bmlmb3JtZXMgZXQgMikgbGVzIHZhbGV1cnMgbXVsdGlwbGVzLiAgDQoNCi0gTm91cyBjaG9pc2lzc29ucyBkJ3VuaWZvcm1pc2VyIGxlcyB2YWxldXJzIGVuIHV0aWxpc2FudCBsZXMgbnVtw6lyb3MgZGUgbGlnbmVzIGV0IGVuIHN1cHByaW1hbnQgbGUgbW90IExpZ25lLiAgDQoNCi0gRXhwbG9yZXIgZXQgYWNjZXB0ZXIgbGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIGF2ZWMgbGEgZm9uY3Rpb24gYEdyb3VwZWAuICANCg0KLSBTdXBwcmltZXIgbGUgbW90IGxpZ25lOiAgDQoNCiAgLSBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gcmVtcGxhY2VyYCAtPiAiTGlnbmUiIHBhcjogbmUgcmllbiBzYWlzaXIgZGFucyBsJ2VuY2FkcsOpLiAgICANCg0KLSBDbGlxdWVyIGVuc3VpdGUgZGlyZWN0ZW1lbnQgc3VyIGBlZGl0YCBzdXIgdW5lIGNlbGx1bGUgZGUgbGEgY29sb25uZSBkZSAqTGlnbmUqIC0+IHJlbWFycXVlciBsYSBwcsOpc2VuY2UgZCd1biBlc3BhY2UsIHN1cHByaW1lciBsJ2VzcGFjZSBldCBmZXJtZXIuIA0KDQotIFJhZnJhaWNoaXIgbGEgZmFjZXR0ZSBldCBvYnNlcnZlciBsJ2ltcGFjdC4gDQoNCi0gUmVtYXJxdWVyIGwnaW1wYWN0IGRlIGwnZXNwYWNlIGRhbnMgbGEgZmFjZXR0ZS4gQ2VzIGVzcGFjZXMgcGV1dmVudCDDqnRyZSBzdXBwcmltw6lzIGdyw6JjZSDDoCBsYSBmb25jdGlvbjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gU3VwcHJpbWVyIGxlcyBlc3BhY2VzIGRlIGTDqWJ1dCBldCBkZSBmaW5gLiAgIA0KLSBSZW1wbGFjZXIgbGVzIGNvdWxldXJzIGRlIGxpZ25lIHBhciBsZXVyIG51bcOpcm8gZGlyZWN0ZW1lbnQgZGFucyBsYSBmYWNldHRlLiAgIA0KPC9kaXY+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipEaXZpc2VyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuIGNyw6lhbnQgZGVzIGNvbG9ubmVzIGF2ZWMgdW5lIHNldWxlIHZhbGV1ciAgKioNCg0KLSBEYW5zIGxhIGZhY2V0dGUsIHJlbXBsYWNlciBsZXMgIi0iIHBhciBkZXMgIiwiLiAgICANCg0KLSBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzYDoNCiAgLSBEw6lmaW5pciBsZSBzw6lwYXJhdGV1ciAiLCIgKGNlbHVpLWNpIGRpc3BhcmFpdHJhKS4gIA0KICAtIETDqWNvY2hlciBsZXMgb3B0aW9ucyAiRGV2aW5lciIgZXQgIlN1cHByaW1lciIuICANCi0gTGVzIG5vdXZlbGxlcyBjb2xvbm5lcyByZXByZW5kcm9udCBsZSBub20gZGUgbCdvcmlnaW5hbCBudW3DqXJvdMOpLiBMZXMgcmVub21tZXI6IHByZW1pZXJlLCBkZXV4aWVtZSwgdHJvaXNpZW1lLCBxdWF0cmllbWUuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KRGl2aXNlciBwYXIgbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHMgbGEgY29sb25uZSBgTnVtw6lybyBkJ2luY2lkZW50YCBwb3VyIGVuIGNyw6llciBkZXV4IG5vdXZlbGxlczogIA0KICAxLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbGUgcHJlbWllciBjYXJhY3TDqHJlIGluZGlxdWFudCBsZSB0eXBlIGQnaW5jaWRlbnQsIHNvaXQgVCAodHJhaW4pIG91IFMgKHNlcnZpY2UpLiAgDQogIDIuIFVuZSBjb2xvbm5lIGNvbnRlbmFudCBsJ2Vuc2VtYmxlIGRlcyBjYXJhY3TDqHJlcyBudW3DqXJpcXVlcyBpbmRpcXVhbnQgbGUgbnVtw6lybyBkJ2luY2lkZW50LiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlbDqXJpZmljYXRpb25zIHByw6lhbGFibGVzOioqDQogIDEuIFbDqXJpZmllciBxdSdpbCBuJ3kgYSBwYXMgZGUgZG91YmxvbiBkYW5zIGNldHRlIGNvbG9ubmU6IGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBkb3VibG9uYCAtPiBRdWVsIGVzdCBsZSBwcm9ibMOobWU/ICBDbGlxdWVyIHN1ciBgQ2hhbmdlcmAgZXQgYW5hbHlzZXIgbCdleHByZXNzaW9uLiAgDQogIDIuIFbDqXJpZmllciBsYSBsb25ndWV1ciBkZSBjaGFxdWUgY2FzOiAgYEZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAtPiBGYWNldHRlIGxvbmd1ZXVyIGR1IHRleHRlYC4gICAgDQoNCioqRGl2aXNlciBsYSBjb2xvbm5lOioqICANCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lcyBzZWxvbiBsZXMgbG9uZ3VldXJzIGRlIGNoYW1wc2AgOiAxLCA4LiAgICANCi0gRMOpY29jaGVyIDogZGV2aW5lciBsZSB0eXBlIGRlIGNlbGx1bGUgZXQgU3VwcHJpbWVyIGNldHRlIGNvbG9ubmUuICAgIA0KLSBSZW5vbW1lciBsZXMgY29sb25uZXMgOiBUeXBlIGV0IElELiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMjIFJlY2hlcmNoZXIvcmVtcGxhY2VyIHVuIGNhcmFjdMOocmUgZGFucyB0b3V0ZXMgbGVzIGNvbG9ubmVzIGF2ZWMgR1JFTA0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KUmVtcGxhY2VyIGxlcyB2YWxldXJzICIjIiBkYW5zIHRvdXRlIGxhIGJhc2UgZGUgZG9ubsOpZXMgcGFyICJhdWN1biIqKiAgIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBRdWVsIHByb2Jsw6htZSBjZSByZW1wbGFjZW1lbnQgcGV1dC1pbCBwcm92b3F1ZXI/ICAgIA0KLSBFeHBsb3JlciBsJ2ltcGFjdCBkZXMgdHJvaXMgZXhwcmVzc2lvbnMgZGUgcmVtcGxhY2VtZW50IHN1aXZhbnRlczogIA0KDQoxLiBgdmFsdWUucmVwbGFjZSgiIyIsICJhdWN1biIpYCAgIA0KKHJlbXBsYWNlIGxlIGNhcmFjdMOocmUgIzogYXVjdW4gZXQgYXVjdW5OL0QgKSAgICAgDQogDQoyLiBgaWYodmFsdWUuY29udGFpbnMoIiMiKSwiYXVjdW4iLCB2YWx1ZSlgICAgDQoocmVtcGxhY2UgbGVzIGNlbGx1bGVzIGRlcyAjIGV0ICNORCBwYXIgYXVjdW4pICANCg0KMy4gYGlmKHZhbHVlPT0oIiMiKSwiYXVjdW4iLCB2YWx1ZSlgICAgICANCihyZW1wbGFjZSBzZXVsZW1lbnQgbGVzIGNlbGx1bGVzICMsIHBhcyBsZXMgI05EIHBhciBhdWN1bikgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgOS4zLiBGdXNpb25uZXIgbGUgY29udGVudSBkZSBwbHVzaWV1cnMgY29sb25uZXMNCg0KIyMjIETDqWZpdCAgIA0KTm91cyBzb3VoYWl0b25zIGNhbGN1bGVyIGxhIGR1csOpZSBkZXMgaW5jaWRlbnRzLiBQb3VyIGNlIGZhaXJlIG5vdXMgY3LDqWVyb25zIGRldXggY29sb25uZXM6ICANCi0gVW5lIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCi0gVW5lIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCkxvcnNxdWUgbCdvbiBmdXNpb25uZSBkZXMgY29sb25uZXMsIGlsIGZhdXQgcG9ydGVyIHVuZSBhdHRlbnRpb24gcGFydGljdWxpw6hyZSBhdSBzw6lwYXJhdGV1ciBjaG9pc2kuIE5lIHBhcyB1dGlsaXNlciB1biBjYXJhY3TDqHJlIHF1aSBwb3VycmFpdCBmYWlyZSBwYXJ0aWUgZHUgY29udGVudSAoZXg6ICwpIG91IHF1aSBzZXJ2aXJhIMOgIGRpdmlzZXIgbGVzIGNvbG9ubmVzICguY3N2KQ0KPC9kaXY+DQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQoxLiAqKkZvbmN0aW9uIGF1dG9tYXRpc8OpZSoqIC0+IEZ1c2lvbm5lciBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBBbm7DqWUgY2l2aWxlIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmVgIC0+IGBKb2luZHJlIGxlcyBjb2xvbm5lc2AuICAgIA0KLSBKb2luZHJlIGRlcyBjb2xvbm5lcyAtPiBDb2NoZXIgbGVzIGNvbG9ubmVzIHZvdWx1ZXMuICANCi0gU8OpcGFyYXRldXIgZW50cmUgbGUgY29udGVudSBkZSBjaGFxdWUgY29sb25uZTogIi0iLiAgICANCi0gw4ljcmlyZSBsZSByw6lzdWx0YXQgZGFucyB1bmUgbm91dmVsbGUgY29sb25uZSBub21tw6llOiAqRGF0ZSouICAgIA0KDQotIFRyYW5zZm9ybWVyIGVuIGZvcm1hdCBkYXRlOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCjIuICoqRmVuw6p0cmUgR1JFTCoqIC0+IEZ1c2lvbm5lciBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgcmVwcmlzZSoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBBbm7DqWUgY2l2aWxlIC0+IMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmU6ICANCg0KYGNlbGxzWyJBbm7DqWUgY2l2aWxlIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siTW9pcyBjYWxlbmRyaWVyIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siSm91ciBkdSBtb2lzIl0udmFsdWUgKyAiICIgKyAgY2VsbHNbIkhldXJlIGRlIGwnaW5jaWRlbnQiXS52YWx1ZWAuICANCg0KLSBWw6lyaWZpZXIgbGEgdHJhbnNmb3JtYXRpb24gYXZlYyB1bmUgZmFjZXR0ZSBgdmFsdWUudHlwZSgpYC4gIA0KDQotIFJlY29tbWVuY2VyIGxhIGpvaW50dXJlIHBvdXIgY3LDqWVyIHVuZSBjb2xvbm5lIGF2ZWMgbGEgZGF0ZS1oZXVyZSBkZSBmaW4gZGUgbCdpbmNpZGVudA0KYGNlbGxzWyJBbm7DqWUgY2l2aWxlIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siTW9pcyBjYWxlbmRyaWVyIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siSm91ciBkdSBtb2lzIl0udmFsdWUgKyAiICIgKyAgY2VsbHNbIkhldXJlIGRlIGwnaW5jaWRlbnQiXS52YWx1ZWAuICANCg0KLSBUcmFuc2Zvcm1lciBlbiBmb3JtYXQgZGF0ZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ2FsY3VsZXIgbGEgZHVyw6llIGRlIGwnaW5jaWRlbnQgIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIENyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSB2aWRlOiAgDQpgRWRpdCBDb2x1bW4gPiBBZGQgQ29sdW1uIEJhc2VkIG9uIFRoaXMgQ29sdW1uIGAgLT4gQ2hvaXNpciB1biBub3V2ZWF1IG5vbSBldCBsZSBjb250ZW51OiAiIi4gIA0KDQotIFBvdXIgY2FsY3VsZXIgdW5lIGRpZmbDqXJlbmNlIGVudHJlIGRhdGU6IGBkaWZmKGRhdGUxLCBkYXRlMiwgInJlc3VsdHMgZm9ybWF0IilgLiAgICANCg0KYGRpZmYoY2VsbHNbJ2RhdGUyJ10udmFsdWUsY2VsbHNbJ2RhdGUxJ10udmFsdWUsICdtaW51dGVzJylgLiAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgMTAuIExlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXMgeyNleHByZXNzaW9ufQ0KDQo8L2JyPg0KDQotIEwndXNhZ2UgZGUgR1JFTCBwZXJtZXQgZGVzIG1hbmlwdWxhdGlvbnMgZGUgZG9ubsOpZXMgYmVhdWNvdXAgcGx1cyBhdmFuY8OpZXMgcXVlIGwndXRpbGlzYXRpb24gZGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBtYWlzIE9wZW5SZWZpbmUgcGVybWV0IGVuIHBsdXMgZGUgY29tYmluZXIgbCd1dGlsaXNhdGlvbiBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGF2ZWMgR1JFTCBwb3VyIGVuIGF1Z21lbnRlciBsYSBwdWlzc2FuY2UuIA0KLSBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBlcm1ldHRlbnQsIMOgIHBhcnRpciBkJ3VuZSBzeW50YXhlIHNww6ljaWZpcXVlLCBkJ2lkZW50aWZpZXIgZGVzIHBhdHRlcm5zIGRhbnMgdW4gY29udGVudS4gIA0KLSBMb3JzcXUndXRpbGlzw6llcyBhdmVjIEdSRUwsIGNlcyBleHByZXNzaW9ucyBwZXJtZXR0ZW50IGRvbmMgZCdpZGVudGlmaWVyIGV0IGQnZXh0cmFpcmUgZGVzIGNvbnRlbnVzIHRyw6hzIHByw6ljaXMgcG91ciBlbnN1aXRlIGxlcyBtYW5pcHVsZXIgc2Vsb24gbGVzIGJlc29pbnMuICANCi0gRWxsZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqWVzIMOgIGRpZmbDqXJlbnRzIGVuZHJvaXRzIGRhbnMgT3BlblJlZmluZSBldCBkb2l2ZW50IHRvdWpvdXJzIMOqdHJlIGVudG91csOpZXMgZGUgYC8gL2A6IGZpbHRyZXMsIGZhY2V0dGVzLCBmZW7DqnRyZSBHUkVMLg0KLSBDZXJ0YWluZXMgZXhwcmVzc2lvbnMgcGV1dmVudCBzJ8OpY3JpcmUgZW4gR1JFTCBhdmVjIG91IHNhbnMgcmVnZXguICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjMzLmpwZykNCg0KDQotIE1haXMgY2VydGFpbmVzIGZvbmN0aW9ucyAoY29tbWUgYG1hdGNoYCkgbidhY2NlcHRlbnQgcXVlIGNlcyBleHByZXNzaW9ucy4gIA0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpZXMgYXZlYyBwbHVzaWV1cnMgYXV0cmVzIGxhbmdhZ2VzIGRvbnQgW1JdKGh0dHBzOi8vdG93YXJkc2RhdGFzY2llbmNlLmNvbS9hLWdlbnRsZS1pbnRyb2R1Y3Rpb24tdG8tcmVndWxhci1leHByZXNzaW9ucy13aXRoLXItZGY1ZTg5N2NhNDMyKSBldCBbUHl0aG9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL3JlZ2V4Lmh0bWwpIGV0IGRhbnMgZGVzIGxvZ2ljaWVscyBxdWkgbidvbnQgcmllbiDDoCB2b2lyIGF2ZWMgbGVzIHN0YXRpc3RpcXVlcyBjb21tZSBbT3Blbk9mZmljZV0oaHR0cHM6Ly93aWtpLm9wZW5vZmZpY2Uub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi9Ib3dfVG9zL1JlZ3VsYXJfRXhwcmVzc2lvbnNfaW5fV3JpdGVyKS4NCg0KUG91ciBlbiBzYXZvaXIgcGx1czogIA0KLSBodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvVW5kZXJzdGFuZGluZy1SZWd1bGFyLUV4cHJlc3Npb25zICANCi0gaHR0cHM6Ly9yZWdleDEwMS5jb20vICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIyMgTGEgc3ludGF4ZSBkZSBiYXNlOiAgIA0KDQpMYSBzeW50YXhlIGVzdCBjb21wb3PDqWUgZCfDqWzDqW1lbnRzIHBlcm1ldHRhbnQgZGUgIGNpYmxlciBkZXMgY2FyYWN0w6hyZXMgcHLDqWNpcyBldCBkZSBkw6lmaW5pciBsZXVyIGVtcGxhY2VtZW50IGV0IGxldXIgb2NjdXJyZW5jZS4NCg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBUWVBFUyBERSBDQVJBQ1TDiFJFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRVUFOVElGSUNBVEVVUlMgRVQgRU1QTEFDRU1FTlQgICAgICAgICAgICAgICAgIHwgDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rDQp8IGAuYCA6IE7igJlpbXBvcnRlIHF1b2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgK2AgOiAxIG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFx3YCA6IG4naW1wb3J0ZSBxdWVsIG1vdCwgY2hpZmZyZSBvdSBfICAgIChgXFdgIDogc2F1ZikgICAgICAgICAgICAgICAgICAgICAgIHwgYCpgIDogMCBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxkYCA6IENoaWZmcmVzICAgICAgKGBcRGAgOiBzYXVmKSAgICAgICAgICAgICAgICAgICAgfCBgP2AgOiAwIG91IHVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcc2AgOiBFc3BhY2VzICAgICAgICAgKGBcU2AgOiBzYXVmKSAgICAgICAgICAgICAgICAgIHwgYHsyfWAgOiBOb21icmUgZXhhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBbQS1aXWAgOiBNYWp1c2N1bGVzICAgICAoYFteQS1aXWAgOiBzYXVmKSAgICAgICAgICAgIHwgYHssNH1gIDogRW50cmUgMCBldCA0IGluY2wuICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW2Etel1gIDogTWludXNjdWxlcyAgICAgIChgW15hLXpdYCA6IHNhdWYpICAgICAgICAgICB8IGB7NCx9YCA6IDQgb3UgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW2FiZDtdYCA6IGxlcyBsZXR0cmVzIGEsIGIsIGMsIGQgZXQgbGUgOyAgICAgICAgICAgICB8IGB7MTszfWAgOiAxIE9VIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBhYmNkYCA6IHVuZSBvdSBwbHVzaWV1cnMgbGV0dHJlcyBleGFjdGVzICAgICAgICAgICAgIHwgYHsxLDN9YCA6IEVudHJlIDEgZXQgMyBpbmNsLiAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHxgIDogT3UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYF5gIDogRMOpYnV0IGQndW5lIGxpZ25lICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYCgpYCA6IEdyb3VwZXIgdW4gY29udGVudSBldCBsZSBnYXJkZXIgZW4gbcOpbW9pcmUgICAgICB8IGAkYCA6IEZpbiBkJ3VuZSBsaWduZSBvdSByYXBwZWxlciB1biBncm91cGUgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8ICBgXGAgOiBDaGVyY2hlciB1biBjYXJhY3TDqHJlIHNww6ljaWFsIGxpdHTDqXJhbGVtZW50ICAgIHwgU2FucyBxdWFudGlmaWNhdGV1ciwgbCdvY2N1cnJlbmNlIGVzdCBkZSAxICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KDQojIyMjIyBQYXIgZXhlbXBsZSwgamUgY2hlcmNoZSB1biBjb250ZW51IGNvcnJlc3BvbmRhbnQgYXUgbW90aWY6ICANCg0KYF5cZHs0fSArW0EtWl1cLmAgICAgDQogICANCi0gZMOpYnV0ZSBwYXIgNCBjaGlmZnJlcyAgIA0KLSBzdWl2aSBkJ3VuIGVzcGFjZSBvdSBwbHVzICAgDQotIHN1aXZpIGQndW5lIGxldHRyZSBtYWp1c2N1bGUgYXZlYyB1biBwb2ludCAgIA0KDQo8L2JyPg0KDQojIyMjIyBBdXRyZXMgZXhlbXBsZXMgYXZlYyBsYSBzeW50YXhlIE9wZW5SZWZpbmU6DQoNCi0gYHZhbHVlLmZpbmQoL1tDY11hcm9saW5lLylgOiBDYXJvbGluZSBldCBjYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYStyb2xpbmUvKWA6IGNhcm9saW5lIGV0IGNhYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhKnJvbGluZS8pYDogY2Fyb2xpbmUsIGNhYWFyb2xpbmUgZXQgY3JvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYT9yb2xpbmUvKWA6IGNhcm9saW5lIGV0IGNyb2xpbmUgbWFpcyBwYXMgY2FhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYXs0fXJvbGluZS8pYDogY2FhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvXkNhcm9sXGIvKWA6IENhcm9sIGVuIGTDqWJ1dCBkJ2V4cHJlc3Npb24sIG1haXMgcGFzIENhcm9saW5lIChcYiA9ICJib3VuZGFyeSIpDQoNCi0gYHZhbHVlLmZpbmQoL2NbYS16XXs2fWUvKWA6IGMgKyA2IG1pbnVzY3VsZXMgKyBlDQoNCi0gYHZhbHVlLmZpbmQoL0NbYS16QS1aMC05XXs2fWUvKWA6IEMgKyA2IG1pbnVzY3VsZXMsIG1hanVzY3VsZXMgb3UgY2hpZmZyZXMgKyBlDQoNCi0gYHZhbHVlLmZpbmQoL0Ncd3s2fWUvKWA6IEMgKyBbQS1aYS16MC05X10gKyBlDQoNCi0gYHZhbHVlLmZpbmQoL0MuezZ9ZS8pYDogQyArIDYgbidpbXBvcnRlIHF1b2kgKyBlDQoNCg0KKioqDQoNCg0KIyMjIEV4ZXJjaWNlOiBNYW5pcHVsZXIgbGVzIMOpbMOpbWVudHMgZGUgcsOpZsOpcmVuY2VzIGJpYmxpb2dyYXBoaXF1ZXMNCg0KIVtdKGltYWdlcy9PUjM2LmpwZykNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCjEuIEFsbGVyIHN1ciBsZSBbZ3VpZGUgQVBBXShodHRwczovL2JpYi51bW9udHJlYWwuY2EvY2l0ZXIvc3R5bGVzLWJpYmxpb2dyYXBoaXF1ZXMvYXBhP3RhYj0zMjgxKS4gICAgIA0KMi4gQ29waWVyIGxlcyBkZXV4IHLDqWbDqXJlbmNlcyBkZSBMZW1haXJlIGV0IExlYm92aWNpIGF1IHBvaW50IDIuMS4gICAgICANCjMuIERhbnMgT3BlblJlZmluZSwgY2xpcXVlciBzdXIgbGUgcGV0aXQgbG9nbyBlbiBoYXV0IMOgIGdhdWNoZSAtPiBgQ3LDqWVyIHVuIHByb2pldGAgLT4gYFByZXNzZS1wYXBpZXJgOiBDb2xsZXIgbGVzIGRldXggcsOpZsOpcmVuY2VzIGVuICBham91dGFudCB1biBzw6lwYXJhdGV1ciAqKiI7IioqIMOgIGxhIGZpbiBkZSBsYSBwcmVtacOocmUgLT4gU3VpdmFudC4gICAgICAgDQoNCjQuIE1vZGlmaWVyIGxlcyBvcHRpb25zOiANCiAgLSBMZXMgY29sb25uZXMgc29udCBzw6lwYXLDqWVzIHBhciAtIHBlcnNvbm5hbGlzw6kgIjsiLiAgDQogIC0gRMOpY29jaGVyICJBbmFseXNlciBsYSBvdSBsZXMJMSBsaWduZShzKSBzdWl2YW50ZShzKSBjb21tZSBkZXMgZW50w6p0ZXMgZGUgY29sb25uZXMiLiAgDQo1LiBDcsOpZXIgcHJvamV0LiAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQo2LiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZWAgIA0KDQo3LiBFeGFtaW5lciBsJ2ltcGFjdCBkZSBjZXMgZGV1eCBjb21tYW5kZXMgKipHUkVMICsgcmVnZXgqKi4gUXUnZXN0LWNlIHF1aSBzZSBwYXNzZT8NCg0KPC9icj4NCioqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXI6ICoqDQoNCj4gYHZhbHVlLmZpbmQoL1woLio/XCkvKWAgIA0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLykuam9pbignLCcpLnJlcGxhY2UoIigiLCIgIikucmVwbGFjZSgiKSIsICIiKWAgIA0KDQo8L2JyPg0KDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQXV0ZXVyIDogYHZhbHVlLnBhcnRpdGlvbigiKCIpWzBdYCBvdSBgdmFsdWUuc3BsaXQoIigiKVswXWAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSBBbm7DqWU6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgICBvdSBhdmVjIHJlZ2V4OiBgdmFsdWUubWF0Y2goLy4qPyhcZHs0fSkuKj8vKVswXWAuICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIHRpdHJlOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzBdYC4gICAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSDDqWRpdGV1cjogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIikuIilbMl1gLiAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRpb246IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCLDqWQiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKihcZCspLiDDqWQuKi8pWzBdYC4gIA0KICAtIENyw6llciBsYSBjb2xvbm5lIHZvbHVtZTogYHZhbHVlLnBhcnRpdGlvbigidm9sLiIpWzJdLnBhcnRpdGlvbigiKSIpWzBdYCBvdSBhdmVjIHJlZ2V4OiBgdmFsdWUubWF0Y2goLy4qdm9sLiAoXGQrKS4qLylbMF1gLiAgDQpBdmVjIHJlZ2V4OiAgDQotIFN1cHByaW1lciBsZXMgbGV0dHJlcyBkdSBwcsOpbm9tOiBgdmFsdWUucmVwbGFjZSgvKFxzW0EtWl0uXHMpfChcc1tBLVpdLixccykvLCAiICIpYC4gIA0KLSBTdXBwcmltZXIgdG91dCBsZSBjb250ZW51IHNhdWYgbGVzIG5vbXMgZGUgZmFtaWxsZTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpfChldCl8KCwpLywgIiAiKWAuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KIyAxMS4gVHJhbnNwb3NpdGlvbg0KDQojIyBFeGVyY2ljZTogdHJhbnNwb3NlciB1biB0YWJsZWF1IGQnaW5kaWNhdGV1cnMgZHUgV0RJDQo8L2JyPg0KDQoqKkZpY2hpZXIgb3JpZ2luYWwgdMOpbMOpY2hhcmfDqSBkZSBsYSBbQmFucXVlIG1vbmRpYWxlXShodHRwczovL2RhdGFiYW5rLmJhbnF1ZW1vbmRpYWxlLm9yZy9yZXBvcnRzLmFzcHg/c291cmNlPXdvcmxkLWRldmVsb3BtZW50LWluZGljYXRvcnMpIGVuIGZvcm1hdCAuY3N2IGNvbXBvc8OpIGRlIDUgcGF5cyBldCA0IGluZGljYXRldXJzIMOgIGwnaG9yaXpvbnRhbGUgZXQgMyBhbm7DqWVzIMOgIGxhIHZlcnRpY2FsZSoqICANCg0KLSBQb3VyIG91dnJpciBsZSBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gZW1wbGFjZW1lbnQgc3VyIEdpdGh1YjogaHR0cHM6Ly9naXRodWIuY29tL0NSTE5QL29wZW5yZWZpbmUgDQogIC0gQ2xpcXVlciBzdXIgbGUgZmljaGllciAqV0RJX0RhdGFfRXh0cmFjdC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuLg0KICANCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMS5qcGcpDQoNCjwvYnI+DQoNCioqMS4gVHJhbnNwb3NlciBsZXMgZGF0ZXMgw6AgbCdob3Jpem9udGFsZSAoZm9ybWF0ICpsb25nKikqKiAgDQoNCjwvYnI+DQoNCirDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc3Bvc2VyIC0+IFRyYW5zcG9zZXIgbGVzIGNlbGx1bGVzIGRlIHBsdXNpZXVycyBjb2xvbm5lcyBlbiBsaWduZXMuLi4qDQoNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTIuanBnKQ0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMy5qcGcpDQoNCjwvYnI+DQoNCioqMi4gUmVtcGxpciBhdXRvbWF0aXF1ZW1lbnQgbGVzIGNlbGx1bGVzIHZpZGVzIGRlcyBkZXV4IGNvbG9ubmVzIMOgIGxhIHZlcnRpY2FsZSoqDQoNCirDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBSZWNvcGllciBsZXMgdmFsZXVycyBkYW5zIGxlcyBjZWxsdWxlcyB2aWRlcyBjb25zw6ljdXRpdmVzKg0KDQo8L2JyPg0KDQoqKjMuIFRyYW5zcG9zZXIgbGVzIGluZGljYXRldXJzIGVuIHZhcmlhYmxlcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqVHJhbnNwb3NlciAtPiBDb252ZXJ0aXIgZW4gbGlzdGUgbGVzIGNvbG9ubmVzIGRlIGNsw6kvdmFsZXVyLi4uKg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTQuanBnKQ0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTUuanBnKQ0KDQo8L2JyPg0KDQoNCioqKg0KDQojIDEyLiBFeHBvcnRlciB1biBmaWNoaWVyIGV0IGZlcm1lciBPcGVuUmVmaW5lDQoNCi0gRm9uY3Rpb24gw6AgdXRpbGlzZXIgbG9yc3F1ZSBsJ29uIGVzdCBwcsOqdCDDoCBleHBvcnRlciBzb24gZmljaGllciBlbiBkaWZmw6lyZW50cyBmb3JtYXRzIHBvdXIgdHJhdmFpbGxlciBkYW5zIHVuIGF1dHJlIGxvZ2ljaWVsICguY3N2LCAueGxzLi4uKQ0KLSBPUiBzYXV2ZWdhcmRlIGF1dG9tYXRpcXVlbWVudCBsZXMgZmljaGllcnMgc291cyBmb3JtZSBkJ2FyY2hpdmVzIGRlIHByb2pldCBkYW5zIHVuIGRvc3NpZXIgc3VyIGxlIHBvc3RlIGRlIHRyYXZhaWwgYXV4cXVlbGxlcyBvbiBwZXV0IGFjY8OpZGVyIGVuIGNsaXF1YW50IHN1ciBgT3V2cmlyIHVuIHByb2pldGAgc3VyIGxhIHBhZ2UgcHJpbmNpcGFsZS4NCi0gTCdvdXRpbCBgRXhwb3J0ZXVyIHRhYnVsYWlyZSBwZXJzb25uYWxpc8OpYCBlc3QgdHLDqHMgdXRpbGUgcG91ciBwYXJhbcOpdHJlciBsJ2V4cG9ydGF0aW9uIChzw6lsZWN0aW9uIGRlIGNvbG9ubmVzLCBmb3JtYXQgZGUgZGF0ZXMsIGZvcm1hdCBkZSBmaWNoaWVyLi4uKQ0KLSBGZXJtZXIgbCdvbmdsZXQgbmUgZmVybWUgcGFzIGxlIHNlcnZldXIgcXVpIGNvbnRpbnVlcmEgw6Agcm91bGVyIGVuIGFycmnDqHJlLXBsYW4uDQotIEFsbGVyIMOgIGxhIGZlbsOqdHJlIG5vaXJlIGR1IHRlcm1pbmFsIGV0IHV0aWxpc2VyIGxlcyB0b3VjaGVzIENUUkwgKyBDIGp1c3F1J8OgIGNlIHF1J2VsbGUgc2UgZmVybWUgZCdlbGxlLW3Dqm1lIChpbCBlc3QgcGFyZm9pcyBuw6ljZXNzYWlyZSBkZSByw6lww6l0ZXIgw6AgcGx1cyBkJ3VuZSByZXByaXNlKS4gTGUgZmljaGllciBzZXJhIGVucmVnaXN0csOpIHVuZSBkZXJuacOocmUgZm9pcyBldCBsZSBsb2dpY2llbCBzZXJhICBtYWludGVuYW50IGJlbCBldCBiaWVuIGZlcm3DqS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAxMy4gUG91ciBmYWlyZSBkdXJlciBsZSBwbGFpc2lyIQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBFeHRyYWlyZSBzZXVsZW1lbnQgY2VydGFpbnMgY2FyYWN0w6hyZXMgc2Vsb24gbGV1ciBwb3NpdGlvbg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpFeHRyYWlyZSBzZXVsZW1lbnQgbGVzIGNhcmFjdMOocmVzIGRlIDUgw6AgNyAgDQoNCi0gdmFsdWVbNSwgN10NCg0KRXh0cmFpcmUgbGVzIGNhcmFjdMOocmVzIMOgIHBhcnRpciBkZSA1ICANCg0KLSB2YWx1ZS5zdWJzdHJpbmcoNSkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTYXZvaXIgc2kgdW5lIGNvbmRpdGlvbiBlc3QgdnJhaWUgb3UgZmF1c3NlPw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXN0LWNlIHF1ZSBsZSBjb250ZW51IGRlcyB2YWxldXJzIGNvcnJlc3BvbmQgw6AgIjIwMTktMDEtMDEiICANCg0KLSB2YWx1ZT09IjIwMTktMDEtMDEiDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29ubmHDrnRyZSBsYSBsb25ndWV1ciBkZXMgdmFsZXVycyBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLmxlbmd0aCgpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcHRlciBsZSBub21icmUgZGUgbW90cyBkYW5zIGRlcyBjZWxsdWxlcyAoc8OpcGFyw6lzIHBhciBkZXMgZXNwYWNlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gdmFsdWUuc3BsaXQoIiAiKS5sZW5ndGgoKSBvdSB2YWx1ZS5zcGxpdCgvXHMvKS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENhbGN1bCBkJ3VuIHBvdXJjZW50YWdlIGFycm9uZGkgKGV4IGQndW4gcsOpc3VsdGF0IHN1ciAxMCkNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gcm91bmQoKHZhbHVlKjEwMCkgLyAxMCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmFuc2Zvcm1lciB1biBmb3JtYXQgZGF0ZSBlbiBmb3JtYXQgdGV4dGUgcGx1cyBsaXNpYmxlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnRvU3RyaW5nKCJkZCBNTU1NIHl5eXkiKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBMYSBjcsOpYXRpb24gZXQgbWFuaXB1bGF0aW9uIGRlIGxpc3RlcyAoKmFycmF5KikgLSBEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgZW4gZm9uY3Rpb24gZCd1biBzw6lwYXJhdGV1ciBwb3VyIG5lIGNvbnNlcnZlciBxdWUgbGUgcHJlbWllciDDqWzDqW1lbnQgICAgDQoNCi0gdmFsdWUuc3BsaXQoIiAiKVswXQ0KDQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBwb3VyIGxlIHLDqW9yZG9ubmVyIA0KDQotIHZhbHVlLnNwbGl0KCIsIikucmV2ZXJzZSgpLmpvaW4oIiwiKQ0KDQotIHZhbHVlLnNwbGl0KCIsIikuc29ydCgpLmpvaW4oIiwiKQ0KDQpEaXZpc2VyIGFwcsOocyBsZXMgMyBwcmVtaWVycyBjYXJhY3TDqHJlcyBldCBjb25zZXJ2ZXIgbGUgcHJlbWllciDDqWzDqW1lbnQgIA0KDQotIHZhbHVlLnNwbGl0QnlMZW5ndGhzKDMpWzBdIA0KDQpEaXZpc2VyIHNlbG9uIGxlIHR5cGUgZGUgY2FyYWN0w6hyZXMgZXQgcmV0ZW5pciBsZSBkZXV4acOobWUgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5Q2hhclR5cGUoKVsxXQ0KDQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBzdXIgdW4gdGVybWUgeCBldCBjb25zZXJ2ZXIgbGUgY29udGVudSBwcsOpY8OpZGVudCANCg0KLSB2YWx1ZS5wYXJ0aXRpb24oInRlcm1lIilbMF0NCg0KLSB2YWx1ZS5wYXJ0aXRpb24oIiB0byAiKVsyXS5wYXJ0aXRpb24oIiBvbiAiKVswXQ0KaHR0cDovL3d3dy5kYXZpZGh1eW5oLm5ldC9zcGFjZXMvbmljYXIyMDExL3R1dG9yaWFsLnBkZg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEludmVyc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgZXQgaW52ZXJzZXIgbCdvcmRyZSBkZSBwcsOpc2VudGF0aW9uIGVuIGFqb3V0YW50IHVuZSB2aXJndWxlIGVudHJlIGxlcyBkZXV4ICANCg0KLSB2YWx1ZS5zcGxpdCgnICcpWzFdICsgIiwiICsgIiAiICsgdmFsdWUuc3BsaXQoJyAnKVswXQ0KDQpPVQ0KDQotIHZhbHVlLm1hdGNoKC8oLiopLCguKikvKS5yZXZlcnNlKCkuam9pbigiICIpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBam91dGVyIHVuIHrDqXJvIHBvdXIgYXZvaXIgdW4gbm9tYnJlIGRlIGNhcmFjdMOocmVzIHByw6ljaXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkFqb3V0ZXIgdW4gesOpcm8gZGV2YW50IGxlIGNvbnRlbnUgc2kgZG9ubmUgdW5lIGNoYWluZSBkZSAwIMOgIDIgY2FyYWN0w6hyZXMgIA0KDQotICIwIlswLDItbGVuZ3RoKHZhbHVlKV0gKyB2YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEFwcGxpcXVlciBkZXMgY29uZGl0aW9ucw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRm9uY3Rpb24gaWYgLSBtw6ptZSBjaG9zZSBxdWUgZGFucyBleGNlbCAgDQoNCi0gaWYodGVzdCwgc2kgdGVzdCBlc3QgdnJhaSwgc2kgdGVzdCBlc3QgdnJhaSkNCg0KU2kgbGEgY2VsbHVsZSBjb250aWVudCB4LCDDqWNyaXJlIHgsIHNpbm9uIHkNCg0KLSBpZih2YWx1ZS5jb250YWlucygieCIpLCAieCIsICJ5IikNCiANCi0gaWYodmFsdWUuY29udGFpbnMoIjEiKSwgdmFsdWUsIG51bGwpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb21wYXJlciBkZXV4IGNvbG9ubmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpJZGVudGlmaWVyIHNpIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUgZXN0IHBhcmVpbCDDoCB1bmUgYXV0cmUgIA0KDQotIHZhbHVlID09IGNlbGxzWydhdXRyZS1jb2xvbm5lJ10udmFsdWUNCg0KRXN0LWNlIHF1ZSBsZSBwcmVtaWVyIGNhcmFjdMOocmUgZGUgbGEgY29sb25uZSB4IGVzdCBsZSBtw6ptZSBxdWUgbGEgY29sb25uZSB5ICANCg0KLSBjZWxsc1siY29sb25uZTEiXS52YWx1ZVswXSA9PSBjZWxsc1siY29sb25uZTIiXS52YWx1ZVswXQ0KDQpDb21wYXJlciBsZSBjb250ZW51IGRlIGRldXggY29sb25uZXMgZXQgbW9kaWZpZXIgbGVzIHZhbGV1cnMgc2Vsb24gbGUgcsOpc3VsdGF0IGRlIGxhIGNvbmRpdGlvbiAgDQoNCi0gaWYoY2VsbHNbImNvbG9ubmUxIl0udmFsdWUgPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWUsICJQYXJlaWwiLCAiUGFzIHBhcmVpbCIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVsOpcmlmaWVyIGxlIGZvcm1hdCBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUudHlwZSgpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBGYWlyZSBkZXMgY2FsY3VscyBzaW1wbGVzICh2YWxldXJzIG51bcOpcmlxdWVzKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpTb21tZSBkJ3VuZSBjb2xvbm5lIHBsdXMgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSArIGNlbGxzWydKb3VyIGR1IG1vaXMnXS52YWx1ZQ0KDQpBcnJvbmRpciBsZSBjb250ZW51ICANCg0KLSByb3VuZCh2YWx1ZSkNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlcHJlbmRyZSBldCBjb25jYXTDqW5lciBsZSBjb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBlbiBmdXNpb25uYW50IGxlIGNvbnRlbnUgZGUgZGV1eCBhdXRyZXMgZXQgYWpvdXRlciBkdSB0ZXh0ZSAgDQoNCi0gY2VsbHNbJ25vbSddLnZhbHVlICsgY2VsbHNbJ25vbSddLnZhbHVlICsgIkJvbmpvdXIhIg0KDQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgYXZlYyBsZXMgdHJvaXMgcHJlbWllcnMgY2FyYWN0w6hyZXMgc2V1bGVtZW50ICANCg0KLSBjZWxsc1snU3ltcHRvbWUnXS52YWx1ZVswLDNdDQoNCi0gVHJhbnNmb3JtZXIgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIGVuIGNvbmNhdMOpbmFudCBsZSBjb250ZW51IGQndW5lIGF1dHJlICANCg0KdmFsdWUgKyAnICcgKyBjZWxsc1snc3RyZWV0LXR5cGUnXS52YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlbXBsYWNlciBkZXMgY2FyYWN0w6hyZXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KUmVtcGxhY2VyIHRvdXQgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIChpY2ksIHZpZGVyIGxhIGNvbG9ubmUpICANCg0KLSB2YWx1ZS5yZXBsYWNlKHZhbHVlLCAiIikNCg0KUmVtcGxhY2VyIHVuZSBsZXR0cmUgcGFyIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUucmVwbGFjZUNoYXJzKCJvIiwgImEiKQ0KDQpGYWlyZSBwbHVzaWV1cnMgcmVtcGxhY2VtZW50cyBkJ3VuIGNvdXAgIA0KDQotIHZhbHVlLnJlcGxhY2UoIjEiLCAidW4iKS5yZXBsYWNlKCIyIiwgImRldXgiKS5yZXBsYWNlKCIzIiwgInRyb2lzIikNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJZGVudGlmaWVyIGRlcyBjZWxsdWxlcyBxdWkgY29tbWVuY2VudCBwYXIuLi4gKHLDqXN1bHRhdCBib29sw6llbikNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSB2YWx1ZS5zdGFydHNXaXRoKCJCZXJyaSIpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFN1cHByaW1lciB1biBjYXJhY3TDqHJlIGRlIGTDqWJ1dCBvdSBmaW4gZGUgdmFsZXVyOg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQoqKlN1cHByaW1lIOKAnFPigJ0gZHUgZMOpYnV0IGRlIGxhIGNlbGx1bGUgICoqDQoNCi0gdmFsdWUucmVwbGFjZSgvXlMvLCIiKSBbcmVnZXggXiBpbmRpcXVlIGxlIGTDqWJ1dCBkJ3VuZSBjZWxsdWxlXQ0KDQoqKlN1cHByaW1lICIuIiDDoCBsYSBmaW4gZGUgbGEgY2VsbHVsZSAgKioNCg0KLSB2YWx1ZS5yZXBsYWNlKC9cLiQvLCIiKSBbcmVnZXggJCBpbmRpcXVlIGxhIGZpbiBkJ3VuZSBjZWxsdWxlXQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFRyYXZhaWxsZXIgYXZlYyB1biBmb3JtYXQgZGF0ZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXh0cmFpcmUgc2V1bGVtZW50IHVuZSBwYXJ0aWUgZCd1bmUgZGF0ZSAgDQoNCi0gdmFsdWUudG9EYXRlKCkuZGF0ZVBhcnQoInllYXIiKSAgDQoNCi0gIGRpZmYobm93KCksdmFsdWUsJ3dlZWtzJykgIA0KDQo8L2Rpdj4NCg0KDQoqKioNCg0KDQojIDE0LiBSZXNzb3VyY2VzDQoNCi0gW1NpdGUgZXQgZG9jdW1lbnRhdGlvbiBvZmZpY2llbHNdKGh0dHBzOi8vb3BlbnJlZmluZS5vcmcvKQ0KDQotIEpvaG4gTGl0dGxlLCAyMDE4LCBbQ2xlYW5pbmcgRGF0YSB3aXRoIE9wZW5SZWZpbmVdKGh0dHBzOi8vbGliam9obi5naXRodWIuaW8vb3BlbnJlZmluZS9pbmRleC5odG1sKSAgDQoNCi0gRXZhbiBXaWxsLCAyMDIxLCBbR2V0IFN0YXJ0ZWQgd2l0aCBPcGVuUmVmaW5lOiBFeHBsb3JlLCBDbGVhbiwgYW5kIFRyYW5zZm9ybSB5b3VyIERhdGEhXShodHRwczovL2V2YW53aWxsLmdpdGh1Yi5pby9vcGVucmVmaW5lLWIvKSAgDQoNCi0gVUNMQSwgMjAxOSwgW0dldHRpbmcgc3RhcnRlZCB3aXRoIE9wZW5SZWZpbmUgRGlnaXRhbCBIdW1hbml0aWVzIDIwMV0oaHR0cDovL21pcmlhbXBvc25lci5jb20vY2xhc3Nlcy9kaDIwMXcxOS90dXRvcmlhbHMtZ3VpZGVzL2RhdGEtY2xlYW5pbmctYW5kLW1hbmlwdWxhdGlvbi9nZXR0aW5nLXN0YXJ0ZWQtd2l0aC1vcGVucmVmaW5lLykNCg0KLSBbUmVmaW5lUHJvIEtub3dsZWRnZSBCYXNlIGZvciBPcGVuUmVmaW5lXShodHRwczovL2tiLnJlZmluZXByby5jb20vKQ0KDQotIFNldGggdmFuIEhvb2xhbmQsIFJ1YmVuIFZlcmJvcmdoLCBhbmQgTWF4IERlIFdpbGRlLCBbQ2xlYW5pbmcgRGF0YSB3aXRoIE9wZW5SZWZpbmVdKGh0dHBzOi8vcHJvZ3JhbW1pbmdoaXN0b3JpYW4ub3JnL2VuL2xlc3NvbnMvY2xlYW5pbmctZGF0YS13aXRoLW9wZW5yZWZpbmUpDQoNCi0gW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwczovL2RvYW5hLmdpdGJvb2tzLmlvL3Rlc3QvY29udGVudC8pDQoNCi0gRGF0YSBDYXJwZW50cnksIFtEYXRhIENsZWFuaW5nIHdpdGggT3BlblJlZmluZSBmb3IgRWNvbG9naXN0c10oaHR0cHM6Ly9kYXRhY2FycGVudHJ5Lm9yZy9PcGVuUmVmaW5lLWVjb2xvZ3ktbGVzc29uLzAwLWdldHRpbmctc3RhcnRlZC9pbmRleC5odG1sKQ0KDQotIE93ZW4gU3RlcGhlbnMsIDIwMTQsIFtJbnRyb2R1Y3Rpb24gdG8gT3BlblJlZmluZV0oaHR0cDovL3d3dy5tZWFuYm95ZnJpZW5kLmNvbS9vdmVyZHVlX2lkZWFzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzExL0ludHJvZHVjdGlvbi10by1PcGVuUmVmaW5lLWhhbmRvdXQtQ0MtQlkucGRmKQ0KDQotIFZlcmJvcmdoIGV0IERlIFdpbGRlLCAyMDEzLCBbVXNpbmcgT3BlblJlZmluZV0oaHR0cHM6Ly93d3cuZ2JpZi5lcy93cC1jb250ZW50L3VwbG9hZHMvMjAxOC8wMS9Vc2luZy1PcGVuUmVmaW5lQm9vay5wZGYpDQoNCi0gW0xpYnJhcnkgQ2FycGVudHJ5OiBPcGVuUmVmaW5lXShodHRwczovL2xpYnJhcnljYXJwZW50cnkub3JnL2xjLW9wZW4tcmVmaW5lLzAxLWludHJvZHVjdGlvbi9pbmRleC5odG1sKQ0KDQotIFtHcmF0ZWZ1bCBEYXRhXShodHRwczovL2dpdGh1Yi5jb20vc2NvdHR5dGhlcmVkL2dyYXRlZnVsZGF0YS93aWtpKSAgDQoNCi0gW0dSRUwgUmVjaXBlc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1JlY2lwZXMpDQoNCi0gW0NoZWF0IFNoZWV0OiBSZWd1bGFyIEV4cHJlc3Npb25zICYgR1JFTF0oaHR0cHM6Ly9jb2RlNGxpYnRvcm9udG8uZ2l0aHViLmlvLzIwMTgtMTAtMTItYWNjZXNzL0dvb2dsZVJlZmluZUNoZWF0U2hlZXRzLnBkZikNCg0KLSBbRXRjIV0oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0V4dGVybmFsLVJlc291cmNlcykNCg0KLVtPcGVuIFJlZmluZSBGT3IgTGlicmFyaWFuc10oaHR0cDovL2xpd29uZy5ibG9nc3BvdC5jb20vKQ0KDQotIFJlY2lwZXM6IFtPcGVuIFJlZmluZSBmb3IgTGlicmFyaWFuc10oaHR0cDovL2xpd29uZy5ibG9nc3BvdC5jb20vc2VhcmNoL2xhYmVsL3JlY2lwZSkNCg0KPHN0eWxlPg0KLnJpZ2h0IHsNCiBmbG9hdDogcmlnaHQ7DQp9DQoNCi5jZW50ZXIgew0KIGFsaWduOiBjZW50ZXI7DQp9DQoNCi5ub3RlIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJvcmRlci1jb2xvcjogZ3JlZW47DQogIGJvcmRlci13aWR0aDogdGhpbjsNCiAgZm9udC1zaXplOiA5MCU7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gxIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICNlMGViZWI7DQogIGNvbG9yOiBibGFjazsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCg0KLmJveDIgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYmFja2dyb3VuZDogIzkyYjliOTsNCiAgY29sb3I6IHdoaXRlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KLmNlbnRlciB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLnRpdGxlIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBjb2xvcjogIzAwMzM2NjsNCn0NCg0KLnN1YnRpdGxlIHsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGxlZ2VuZCB7DQogIGNvbG9yOiAjNUE3QjlDOw0KfQ0KDQo8L3N0eWxlPg==